home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 2 / Gold Medal Software Volume 2 (Gold Medal) (1994).iso / utils / inter37a.arj / INTERRUP.B < prev    next >
Text File  |  1993-10-03  |  341KB  |  9,037 lines

  1. Interrupt List, part 2 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------S-14---------------------------------
  4. INT 14 - SERIAL - Digiboard DigiCHANNEL PC/X* Extender INT 14 (XAPCM232.SYS)
  5. Note:    the installation check for this driver is to determine whether the
  6.       "~DOSXAM~" character device exists
  7. Index:    installation check;Digiboard DigiCHANNEL
  8. --------S-1400-------------------------------
  9. INT 14 - SERIAL - INITIALIZE PORT
  10.     AH = 00h
  11.     AL = port parameters
  12.         bits 7-5 data rate (110,150,300,600,1200,2400,4800,9600 bps)
  13.         bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
  14.         bit 2    stop bits (set = 2, clear = 1)
  15.         bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
  16.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  17. Return: AH = line status (see AH=03h)
  18.         FFh if error on Digiboard XAPCM232.SYS
  19.     AL = modem status (see AH=03h)
  20. Notes:    default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes
  21.     since the PCjr supports a maximum of 4800 bps, attempting to set 9600
  22.       bps will result in 4800 bps
  23.     various network and serial-port drivers support the standard BIOS
  24.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  25.     the 04/08/93 Compaq system ROM uses only the low two bits of DX
  26. SeeAlso: AH=04h"SERIAL",AH=04h"MultiDOS",AH=05h"SERIAL",AH=57h
  27. SeeAlso: AX=8000h"ARTICOM",AH=81h"COMM-DRV",AH=82h"COURIERS",AH=8Ch
  28. --------S-1400-------------------------------
  29. INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
  30.     AH = 00h
  31.     AL = initializing parameters
  32.         7 - 6 - 5       4 - 3     2      1 - 0
  33.         -BAUD RATE-       PARITY   STOP   WORD
  34.                     BITS  LENGTH
  35.         000 19200 bd   00 none  0: 1  00: 5
  36.         001 38400 bd   01 odd   1: 2  01: 6
  37.         010      300 bd   11 even      10: 7
  38.         011      600 bd          11: 8
  39.         100     1200 bd
  40.         101     2400 bd
  41.         110     4800 bd
  42.         111     9600 bd (4800 on PCjr)
  43.     DX = port number (0-3 or FFh if only performing non-I/O setup)
  44. Return: AH = RS-232 status code bits
  45.         bit 0: RDA - input data is available in buffer
  46.         bit 1: OVRN - data has been lost
  47.         bit 5: THRE - room is available in output buffer
  48.         bit 6: TSRE - output buffer empty
  49.     AL = modem status bits
  50.         bit 3: always 1
  51.         bit 7: DCD - carrier detect
  52. SeeAlso: AH=05h"FOSSIL",AH=81h"COMM-DRV",AH=82h"COURIERS"
  53. --------S-1400-------------------------------
  54. INT 14 - MBBIOS - INITIALIZE PORT
  55.     AH = 00h
  56.     AL = port parameters
  57.         bits 7-5 data rate
  58.             (normally 110,150,300,600,1200,2400,4800,9600 bps;
  59.             9600,14400,19200,28800,38400,57600,115200,330400 bps
  60.             if the high-speed option is set)
  61.         bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
  62.         bit 2    stop bits (set = 2, clear = 1)
  63.         bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
  64.     DX = port number
  65. Return: AH = line status (see AH=03h)
  66.     AL = modem status (see AH=03h)
  67. Note:    MBBIOS was written by H. Roy Engehausen
  68. SeeAlso: AH=04h"MBBIOS",AH=05h"MBBIOS"
  69. --------S-1401-------------------------------
  70. INT 14 - SERIAL - WRITE CHARACTER TO PORT
  71.     AH = 01h
  72.     AL = character to write
  73.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  74. Return: AH bit 7 clear if successful
  75.     AH bit 7 set on error
  76.     AH bits 6-0 = port status (see AH=03h)
  77. Notes:    various network and serial-port drivers support the standard BIOS
  78.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  79.     the 04/08/93 Compaq system ROM uses only the low two bits of DX
  80. SeeAlso: AH=02h,AH=0Bh"FOSSIL",AX=8000h"ARTICOM",AH=89h
  81. --------S-1402-------------------------------
  82. INT 14 - SERIAL - READ CHARACTER FROM PORT
  83.     AH = 02h
  84.     AL = 00h (ArtiCom)
  85.     DX = port number (00h-03h (04h-43h for Digiboard XAPCM232.SYS))
  86. Return: AH = line status (see AH=03h)
  87.     AL = received character if AH bit 7 clear
  88. Notes:    will timeout if DSR is not asserted, even if function 03h returns
  89.       data ready
  90.     various network and serial-port drivers support the standard BIOS
  91.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  92.     the 04/08/93 Compaq system ROM uses only the low two bits of DX
  93. SeeAlso: AH=01h,AH=02h"FOSSIL",AH=84h,AH=FCh
  94. --------S-1402-------------------------------
  95. INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
  96.     AH = 02h
  97.     DX = port number (0-3)
  98. Return: AL = character received
  99.     AH = 00h
  100. SeeAlso: AH=01h,AH=02h"SERIAL"
  101. --------S-1403-------------------------------
  102. INT 14 - SERIAL - GET PORT STATUS
  103.     AH = 03h
  104.     AL = 00h (ArtiCom)
  105.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  106. Return: AH = line status (see below)
  107.     AL = modem status (see below)
  108.     AX = 9E00h if disconnected (ArtiCom)
  109. Note:    the 04/08/93 Compaq system ROM uses only the low two bits of DX
  110. SeeAlso: AH=00h,AH=07h"MultiDOS",AX=8000h"ARTICOM",AH=81h"COURIERS",AX=FD02h
  111.  
  112. Bitfields for line status:
  113.  bit 7    timeout
  114.  bit 6    transmit shift register empty
  115.  bit 5    transmit holding register empty
  116.  bit 4    break detected
  117.  bit 3    framing error
  118.  bit 2    parity error
  119.  bit 1    overrun error
  120.  bit 0    receive data ready
  121.  
  122. Bitfields for modem status:
  123.  bit 7    carrier detect
  124.  bit 6    ring indicator
  125.  bit 5    data set ready
  126.  bit 4    clear to send
  127.  bit 3    delta carrier detect
  128.  bit 2    trailing edge of ring indicator
  129.  bit 1    delta data set ready
  130.  bit 0    delta clear to send
  131. --------S-1404-------------------------------
  132. INT 14 - SERIAL - EXTENDED INITIALIZE (CONVERTIBLE,PS)
  133.     AH = 04h
  134.     AL = break status
  135.         00h if break
  136.         01h if no break
  137.     BH = parity (see below)
  138.     BL = number of stop bits
  139.         00h one stop bit
  140.         01h two stop bits (1.5 if 5 bit word length)
  141.     CH = word length (see below)
  142.     CL = bps rate (see below)
  143.     DX = port number
  144. Return: AX = port status code (see AH=00h)
  145. SeeAlso: AH=00h,AH=1Eh,AX=8000h"ARTICOM"
  146.  
  147. Values for parity:
  148.  00h    no parity
  149.  01h    odd parity
  150.  02h    even parity
  151.  03h    stick parity odd
  152.  04h    stick parity even
  153.  
  154. Values for word length:
  155.  00h    5 bits
  156.  01h    6 bits
  157.  02h    7 bits
  158.  03h    8 bits
  159.  
  160. Values for bps rate:
  161.  00h    110
  162.  01h    150
  163.  02h    300
  164.  03h    600
  165.  04h    1200
  166.  05h    2400
  167.  06h    4800
  168.  07h    9600
  169.  08h    19200
  170. --------S-1404-------------------------------
  171. INT 14 - FOSSIL - INITIALIZE DRIVER
  172.     AH = 04h
  173.     DX = port number
  174.     optionally BX=4F50h
  175.            ES:CX -> byte to be set upon ^C
  176. Return: AX = 1954h (if successful)
  177.     BL = maximum function number supported (excluding 7Eh and above)
  178.     BH = revision of FOSSIL specification supported
  179.     DTR is raised
  180. Note:    the word at offset 6 in the interrupt handler contains 1954h, and the
  181.       following byte contains the maximum function number supported; this
  182.       can serve as an installation check
  183. SeeAlso: AH=05h"FOSSIL",AH=1Ch,INT 11/AH=BCh
  184. Index:    installation check;FOSSIL
  185. --------S-1404-------------------------------
  186. INT 14 - MultiDOS Plus IODRV - INITIALIZE PORT
  187.     AH = 04h
  188. Return: port initialized; if Hayes-compatible modem, a connection has been
  189.       established
  190. Note:    the port number is stored at offset BEh in the Task Control Block
  191.       (see INT 15/AH=13h"MultiDOS")
  192. SeeAlso: AH=00h,AH=05h"MultiDOS",AH=20h"MultiDOS",INT 15/AH=13h"MultiDOS"
  193. --------S-1404-------------------------------
  194. INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE BAUD RATE
  195.     AH = 04h
  196.     AL = initializing parameters
  197.         bits 7-5 unused
  198.         bits 4,3: parity (00 none, 01 odd, 11 even)
  199.         bit 2: stop bits (0 = one, 1 = two)
  200.         bits 1,0: data bits (00 = five, 01 = six, 10 = seven, 11 = eight)
  201.     BX = baud rate
  202.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  203. Return: AH = status
  204.         00h successful
  205.         FFh error
  206. SeeAlso: AH=05h"Digiboard"
  207. --------S-1404-------------------------------
  208. INT 14 - MBBIOS - INQUIRY
  209.     AH = 04h
  210. Return: AH = AAh
  211.     AL = 55h
  212. SeeAlso: AH=00h"MBBIOS",AH=09h"MBBIOS"
  213. --------S-140400-----------------------------
  214. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - INSTALLATION CHECK
  215.     AX = 0400h
  216. Return: AX = 0FF0h
  217. SeeAlso: AX=0401h,AX=0408h
  218. --------S-140401-----------------------------
  219. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - INITIALIZE MODE
  220.     AX = 0401h
  221.     CX = mode
  222. SeeAlso: AX=0400h,AX=0402h
  223. --------S-140402-----------------------------
  224. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - EXTENDED INITIALIZE
  225.     AX = 0402h
  226.     CL = parameters
  227. SeeAlso: AX=0400h,AX=0401h
  228. --------S-140403-----------------------------
  229. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - SET TIMEOUT
  230.     AX = 0403h
  231.     CX = timeout
  232. SeeAlso: AX=0400h
  233. --------S-140404-----------------------------
  234. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - CLEAR THE RECEIVE BUFFER
  235.     AX = 0404h
  236. SeeAlso: AX=0400h,AX=0405h,AX=0406h
  237. --------S-140405-----------------------------
  238. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - GET RECEIVE BUFFER COUNT
  239.     AX = 0405h
  240. Return: AX = number of characters in buffer
  241. SeeAlso: AX=0400h,AX=0404h,AX=0407h
  242. --------S-140406-----------------------------
  243. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - CLEAR THE TRANSMIT BUFFER
  244.     AX = 0406h
  245. SeeAlso: AX=0400h,AX=0404h,AX=0407h
  246. --------S-140407-----------------------------
  247. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - GET TRANSMIT BUFFER COUNT
  248.     AX = 0407h
  249. Return: AX = number of characters in the buffer
  250. SeeAlso: AX=0400h,AX=0405h,AX=0406h
  251. --------S-140408-----------------------------
  252. INT 14 - Microsoft Systems Journal TSRCOMM INT14 - UNINSTALL
  253.     AX = 0408h
  254. SeeAlso: AX=0400h
  255. --------S-1405-------------------------------
  256. INT 14 - SERIAL - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
  257.     AH = 05h
  258.     AL = function
  259.         00h read modem control register
  260.           Return: BL = modem control register (see below)
  261.               AH = status
  262.         01h write modem control register
  263.           BL = modem control register (see below)
  264.           Return: AX = status
  265.     DX = port number
  266. Note:    also supported by ArtiCom
  267. SeeAlso: AH=00h,AH=1Fh,AX=8000h"ARTICOM",AH=FBh
  268.  
  269. Bitfields for modem control register:
  270.  bit 0    data terminal ready
  271.  bit 1    request to send
  272.  bit 2    OUT1
  273.  bit 3    OUT2
  274.  bit 4    LOOP
  275.  bits 5-7 reserved
  276. --------S-1405-------------------------------
  277. INT 14 - FOSSIL - DEINITIALIZE DRIVER
  278.     AH = 05h
  279.     DX = port number
  280. Return: none
  281.     DTR is not affected
  282. SeeAlso: AH=00h,AH=04h"FOSSIL",AH=1Dh,AH=8Dh
  283. --------S-1405-------------------------------
  284. INT 14 - MultiDOS Plus IODRV - READ CHARACTER FROM PORT
  285.     AH = 05h
  286.     AL = timeout in seconds (00h = never)
  287. Return: AL = status
  288.         00h successful
  289.         AH = character read
  290.         01h read error
  291.         02h timed out
  292.         other modem status (CTS, DSR) changed
  293. Note:    the port number is stored at offset BEh in the Task Control Block
  294. SeeAlso: AH=02h,AH=04h"MultiDOS",AH=06h"MultiDOS",AH=22h"MultiDOS"
  295. SeeAlso: INT 15/AH=13h"MultiDOS"
  296. --------S-1405-------------------------------
  297. INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE PROTOCOL
  298.     AH = 05h
  299.     AL = protocol
  300.         bits 7-4 unused
  301.         bit 3: RTS/CTS
  302.         bit 2: DSR
  303.         bits 1,0: XON/XOFF
  304.     BH = new XOFF character (00h = current)
  305.     BL = new XON character (00h = current)
  306.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  307. Return: AH = status
  308.         00h successful
  309.         FFh error
  310. SeeAlso: AH=04h"Digiboard"
  311. --------S-1405-------------------------------
  312. INT 14 - MBBIOS - DROP DTR AND RTS
  313.     AH = 05h
  314.     DX = port number
  315. Return: none
  316. SeeAlso: AH=00h"MBBIOS",AH=06h"MBBIOS",AH=06h"FOSSIL"
  317. --------S-1405-------------------------------
  318. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - CHANGE PORT PROTOCOL
  319.     AH = 05h
  320.     AL = bit 7: set to enable/disable CD monitoring, clear to set protocol
  321.          ---bit 7 set---
  322.          bit 4: CD monitoring enabled
  323.          bit 5: automatic restart enabled
  324.          ---bit 7 clear---
  325.          bit 0: receive XON/XOFF
  326.          bit 1: transmit XON/XOFF
  327.          bit 2: DTR/DSR
  328.          bit 3: RTS/CTS
  329.     BH = new XOFF character
  330.     BL = new XON character
  331.     DX = port number
  332. Return: AH = FFh if invalid protocol
  333. SeeAlso: AH=00h,AH=04h"SERIAL",AH=06h"PC-MOS"
  334. --------S-1406-------------------------------
  335. INT 14 - FOSSIL - RAISE/LOWER DTR
  336.     AH = 06h
  337.     DX = port
  338.     AL = DTR state to be set
  339.         00h = lower
  340.         01h = raise
  341. SeeAlso: AH=05h"MBBIOS",AH=1Ah
  342. --------S-1406-------------------------------
  343. INT 14 - MultiDOS Plus IODRV - WRITE CHARACTER TO PORT
  344.     AH = 06h
  345.     AL = character
  346. Return: AL = status
  347.         00h successful
  348. Notes:    the port number is stored at offset BEh in the Task Control Block
  349.     if output queue is full, the calling task is blocked until the
  350.       character can be stored
  351. SeeAlso: AH=01h,AH=04h"MultiDOS",AH=05h"MultiDOS",AH=21h"MultiDOS"
  352. SeeAlso: INT 15/AH=13h"MultiDOS"
  353. --------S-1406-------------------------------
  354. INT 14 - MBBIOS - RAISE DTR AND RTS
  355.     AH = 06h
  356.     DX = port number
  357. Return: none
  358. SeeAlso: AH=05h"MBBIOS",AH=07h"MBBIOS"
  359. --------S-1406-------------------------------
  360. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DRIVER 'ID' FUNCTION
  361.     AH = 06h
  362.     DX = port number
  363. Return: AH bit 7 set
  364.     AL = number of highest function supported by driver
  365. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  366.       operating system by The Software Link, Inc.
  367. SeeAlso: AH=18h"PC-MOS"
  368. --------N-1406-------------------------------
  369. INT 14 - TelAPI - WRITE???
  370.     AH = 06h
  371.     CX = number of characters to write???
  372.     DX = port number
  373.     ES:DI -> buffer containing data???
  374. Return: AX = number of characters actually sent??? (negative on error)
  375.     CX = ???
  376. Note:    under Novell TELAPI.EXE v4.01, this function and AH=07h are implemented
  377.       with identical code
  378. SeeAlso: AH=07h"TelAPI",AH=E0h"TelAPI"
  379. --------S-1407-------------------------------
  380. INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
  381.     AH = 07h
  382. Return: AL = timer tick interrupt number
  383.     AH = ticks per second on interrupt number in AL
  384.     DX = approximate number of milliseconds per tick
  385. SeeAlso: AH=16h
  386. --------S-1407-------------------------------
  387. INT 14 - MultiDOS Plus IODRV - GET PORT STATUS
  388.     AH = 07h
  389. Return: CL = modem status (see AH=03h)
  390.     CH = character at head of input queue (if any)
  391.     DX = number of characters in input queue
  392. Note:    the port number is stored at offset BEh in the Task Control Block
  393. SeeAlso: AH=03h,AH=05h"MultiDOS",AH=08h"MultiDOS",AH=09h"MultiDOS"
  394. SeeAlso: AH=23h"MultiDOS",INT 15/AH=13h"MultiDOS"
  395. --------S-1407-------------------------------
  396. INT 14 - MBBIOS - SEND BREAK
  397.     AH = 07h
  398.     DX = port number
  399. Return: none
  400. SeeAlso: AH=06h"MBBIOS"
  401. --------S-1407-------------------------------
  402. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - SEND RS-232 BREAK
  403.     AH = 07h
  404.     BX = duration of break in clock ticks
  405.     DX = port number
  406. Return: nothing
  407. --------N-1407-------------------------------
  408. INT 14 - TelAPI - WRITE???
  409.     AH = 07h
  410.     CX = number of characters to write???
  411.     DX = port number
  412.     ES:DI -> buffer containing data???
  413. Return: AX = number of characters actually sent??? (negative on error)
  414.     CX = ???
  415. Note:    under Novell TELAPI.EXE v4.01, this function and AH=06h are implemented
  416.       with identical code
  417. SeeAlso: AH=06h"TelAPI",AH=E0h"TelAPI"
  418. --------S-1408-------------------------------
  419. INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
  420.     AH = 08h
  421.     DX = port number
  422. SeeAlso: AH=09h"FOSSIL"
  423. --------S-1408-------------------------------
  424. INT 14 - MultiDOS Plus 4.0 IODRV - GET AND RESET PORT LINE STATUS
  425.     AH = 08h
  426. Return: AL = line status (see AH=03h)
  427.     AH destroyed
  428. Notes:    the port number is stored at offset BEh in the Task Control Block
  429.     on every line status change, the line status is ORed with the line
  430.       status accumulator; this function returns the accumulator and clears
  431.       it
  432. SeeAlso: AH=03h,AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
  433. --------S-1408-------------------------------
  434. INT 14 - Digiboard DigiCHANNEL PC/X* - ALTERNATE STATUS CHECK
  435.     AH = 08h
  436.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  437. Return: AH = RS232 status bits (see AH=03h)
  438.     ZF set if no characters queued
  439.     ZF clear if character available
  440.         AL = next character
  441. SeeAlso: AH=03h,AH=08h"PC-MOS",AH=09h"Digiboard"
  442. --------S-1408-------------------------------
  443. INT 14 - MBBIOS - NON-DESTRUCTIVE READ
  444.     AH = 08h
  445.     DX = port number
  446. Return: AL = character
  447.     AH = status (see AH=02h)
  448. SeeAlso: AH=0Bh"MBBIOS",AH=0Ch"FOSSIL"
  449. --------S-1408-------------------------------
  450. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - INPUT STATUS CHECK
  451.     AH = 08h
  452.     DX = port number
  453. Return: CF set if carrier loss detected
  454.     ZF set if input buffer empty
  455.     ZF clear if characters available
  456.         AL = next character dequeued
  457. --------S-1409-------------------------------
  458. INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
  459.     AH = 09h
  460.     DX = port number
  461. SeeAlso: AH=08h"FOSSIL",AH=0Ah"FOSSIL",AH=88h
  462. --------S-1409-------------------------------
  463. INT 14 - MultiDOS Plus IODRV - RESET PORT STATUS
  464.     AH = 09h
  465. Return: modem status byte cleared
  466. Note:    the port number is stored at offset BEh in the Task Control Block
  467. SeeAlso: AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
  468. --------S-1409-------------------------------
  469. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR BUFFERS
  470.     AH = 09h
  471.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  472. Return: AH = status
  473.         00h successful
  474.         FFh error
  475. SeeAlso: AH=08h"Digiboard",AH=0Ah"Digiboard",AH=10h"Digiboard"
  476. --------S-1409-------------------------------
  477. INT 14 - MBBIOS - GET/SET OPTIONS
  478.     AH = 09h
  479.     AL = option byte
  480.         00000001b - Transmit Buffering Enabled
  481.         00000101b - Hardware Handshaking Enabled
  482.         00100000b - High Speed Option Enabled
  483.     DX = port number???
  484. Return: AL = old option byte
  485. SeeAlso: AH=04h"MBBIOS",AH=10h"FOSSIL"
  486. --------S-1409-------------------------------
  487. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - RESET I/O BUFFER POINTERS
  488.     AH = 09h
  489.     DX = port number
  490. Return: nothing
  491. SeeAlso: AH=13h"PC-MOS"
  492. --------S-140A-------------------------------
  493. INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT
  494.     AH = 0Ah
  495.     DX = port number
  496. SeeAlso: AH=09h"FOSSIL",AH=85h
  497. --------S-140A-------------------------------
  498. INT 14 - Digiboard DigiCHANNEL PC/X* - INPUT QUEUE CHECK
  499.     AH = 0Ah
  500.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  501. Return: AX = number of characters available in buffer
  502. Note:    this function is also supported by the PC-MOS/386 v5.01 $serial.sys
  503. SeeAlso: AH=09h"Digiboard",AH=0Dh"Digiboard"
  504. --------S-140A-------------------------------
  505. INT 14 - MBBIOS - WRITE BUFFER
  506.     AH = 0Ah
  507.     CX = count
  508.     ES:DI -> buffer
  509. Return: AX = status (see AH=03h)
  510.     DI = is updated
  511.     CX = unsent character count
  512. SeeAlso: AH=0Bh"MBBIOS",AH=19h"FOSSIL"
  513. --------S-140B-------------------------------
  514. INT 14 - FOSSIL - TRANSMIT NO WAIT
  515.     AH = 0Bh
  516.     AL = character
  517.     DX = port number
  518. Return: AX = 0000h character not accepted
  519.        = 0001h character accepted
  520. SeeAlso: AH=01h
  521. --------S-140B-------------------------------
  522. INT 14 - MBBIOS - READ BUFFER
  523.     AH = 0Bh
  524.     CX = size of buffer
  525.     ES:DI -> buffer
  526. Return: AH = LSR
  527.     AL = MSR
  528.     CX = count of characters
  529.     DI = is updated
  530. SeeAlso: AH=08h"MBBIOS",AH=0Ah"MBBIOS",AH=18h"FOSSIL"
  531. --------S-140C-------------------------------
  532. INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
  533.     AH = 0Ch
  534.     DX = port number
  535. Return: AX = FFFFh character not available
  536.     AX = 00xxh character xx available
  537. SeeAlso: AH=08h"MBBIOS",AH=20h"FOSSIL"
  538. --------S-140D-------------------------------
  539. INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
  540.     AH = 0Dh
  541. Return: AX = FFFFh character not available
  542.        = xxyyh standard IBM-style scan code
  543. SeeAlso: AH=0Eh
  544. --------S-140D-------------------------------
  545. INT 14 - Digiboard DigiCHANNEL PC/X* - GET POINTER TO CH_KEY_RDY FLAG
  546.     AH = 0Dh
  547.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  548. Return: ES:BX -> CH_KEY_RDY flag
  549. SeeAlso: AH=0Ah"Digiboard"
  550.  
  551. Values for CH_KEY_RDY flag:
  552.  00h    receive buffer empty
  553.  FFh    characters available
  554. --------S-140E-------------------------------
  555. INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
  556.     AH = 0Eh
  557. Return: AX = xxyyh standard IBM-style scan code
  558. SeeAlso: AH=0Dh"FOSSIL"
  559. --------S-140E-------------------------------
  560. INT 14 - Digiboard DigiCHANNEL PC/X* - WRITE STRING
  561.     AH = 0Eh
  562.     CX = number of characters to write
  563.     ES:BX -> string
  564.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  565. Return: AX = number of characters actually written
  566.     ZF clear if successful
  567.     ZF set on error
  568. SeeAlso: AH=0Fh"Digiboard"
  569. --------S-140F-------------------------------
  570. INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
  571.     AH = 0Fh
  572.     AL = bit mask describing requested flow control (see below)
  573.     DX = port number
  574. SeeAlso: AH=09h"MBBIOS",AH=10h"FOSSIL"
  575.  
  576. Bitfields for requested flow control:
  577.  bit 0    XON/XOFF on transmit (watch for XOFF while sending)
  578.  bit 1    CTS/RTS (CTS on transmit/RTS on receive)
  579.  bit 2    reserved
  580.  bit 3    XON/XOFF on receive (send XOFF when buffer near full)
  581.  bit 4-7 all 1
  582. --------S-140F-------------------------------
  583. INT 14 - Digiboard DigiCHANNEL PC/X* - READ STRING
  584.     AH = 0Fh
  585.     CX = number of characters to read
  586.     ES:BX -> buffer
  587.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  588. Return: AX = number of characters read
  589.     ZF clear if successful
  590.     ZF set on error (line status or wrong number of characters)
  591. SeeAlso: AH=0Eh"Digiboard"
  592. --------S-1410-------------------------------
  593. INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
  594.     AH = 10h
  595.     AL = bit mask
  596.         bit 0: enable/disable ^C/^K checking
  597.         bit 1: enable/disable the transmitter
  598.     DX = port number
  599. SeeAlso: AH=0Fh"FOSSIL"
  600. --------S-1410-------------------------------
  601. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER
  602.     AH = 10h
  603.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  604. Return: AH = status
  605.         00h successful
  606.         FFh error
  607. SeeAlso: AH=09h"Digiboard",AH=11h"Digiboard"
  608. --------S-1411-------------------------------
  609. INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
  610.     AH = 11h
  611.     DH = row
  612.     DL = column
  613. Note:    this is the same as INT 10/AH=02h
  614. SeeAlso: AH=12h"FOSSIL"
  615. --------S-1411-------------------------------
  616. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER
  617.     AH = 11h
  618.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  619. Return: AH = status
  620.         00h successful
  621.         FFh error
  622. SeeAlso: AH=09h"Digiboard",AH=10h"Digiboard"
  623. ----------1411-------------------------------
  624. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DISABLE PORT
  625.     AH = 11h
  626.     DX = port number
  627. Return: AL = status
  628.         00h successful
  629.         01h IRQ for port is shared
  630.         02h IRQ was reserved
  631. SeeAlso: AH=04h,AH=05h,AH=12h"PC-MOS"
  632. --------S-1412-------------------------------
  633. INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
  634.     AH = 12h
  635. Return: DH = row
  636.     DL = column
  637. Note:    this is the same as INT 10/AH=03h
  638. SeeAlso: AH=11h"FOSSIL"
  639. --------S-1412-------------------------------
  640. INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE
  641.     AH = 12h
  642.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  643. Return: AX = number of bytes free
  644. SeeAlso: AH=0Ah"Digiboard"
  645. --------S-1412-------------------------------
  646. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - GET CURRENT PORT PARAMETERS
  647.     AH = 12h
  648.     DX = port number
  649. Return: AH = status
  650.         FFh port number invalid
  651.     AL = line parameters (see AH=00h)
  652.     AH = flow control configuration (see AH=05h"PC-MOS")
  653.     CX:BX = bps rate
  654.     DL = XOFF character or 00h for none
  655.     DH = XON character or 00h for none
  656. --------S-1413-------------------------------
  657. INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
  658.     AH = 13h
  659.     AL = character
  660. Note:    should not be called if it is unsafe to call DOS
  661. SeeAlso: AH=15h
  662. --------S-1413-------------------------------
  663. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - REGISTER A PORT WITH A TERMINAL
  664.     AH = 13h
  665.     DX = port number
  666. Return: AH = status
  667.         FFh port number invalid
  668.         else
  669.         ES:BX -> BYTE flag (00h buffer empty, FFh buffer contains data)
  670. SeeAlso: AH=17h"PC-MOS"
  671. --------S-1414-------------------------------
  672. INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
  673.     AH = 14h
  674.     AL = 01h enable watchdog
  675.          00h disable watchdog
  676.     DX = port number
  677. --------S-1414-------------------------------
  678. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - OUTPUT STRING
  679.     AH = 14h
  680.     CX = number of characters in string
  681.     DX = port number
  682.     ES:BX -> string to be sent
  683.     SI = timeout in timer ticks or 0000h for default
  684. Return: AX = number of bytes actually sent
  685.     ZF clear if successful
  686.     ZF set on timeout
  687. SeeAlso: AH=01h,AH=15h"PC-MOS"
  688. --------S-1415-------------------------------
  689. INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
  690.     AH = 15h
  691.     AL = character
  692. SeeAlso: AH=13h"FOSSIL"
  693. --------S-1415-------------------------------
  694. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - INPUT STRING
  695.     AH = 15h
  696.     CX = size of buffer
  697.     DX = port number
  698.     ES:BX -> buffer for received characters
  699.     SI = timeout in clock ticks or 0000h for default
  700. Return: AX = number of characters actually read
  701.     ZF set on timeout (no data available)
  702. SeeAlso: AH=02h,AH=14h"PC-MOS",AH=16h"PC-MOS"
  703. --------S-1416-------------------------------
  704. INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
  705.     AH = 16h
  706.     AL = function
  707.         00h = delete
  708.         01h = add
  709.     ES:DX -> routine to call
  710. Return: AX = status
  711.         0000h successful
  712.         0001h unsuccessful
  713. SeeAlso: AH=07h"FOSSIL"
  714. --------S-1416-------------------------------
  715. INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND
  716.     AH = 16h
  717.     AL = CCB command number (see below)
  718.     BL = byte 2
  719.     BH = byte 3
  720.     CL = byte 1 (for all channel functions except 4Eh and 4Fh)
  721.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  722. Return: AH = status
  723.         00h successful
  724.         FFh error
  725. SeeAlso: AH=18h"Digiboard"
  726.  
  727. Values for CCB command number:
  728.  40h    Set Receive Mid Water Mark
  729.  41h    Set Receive High Water Mark
  730.  42h    Flush Receive Buffer
  731.  43h    Flush Transmit Buffer
  732.  44h    Transmit Pause
  733.  45h    Transmit Resume
  734.  46h    Set Interrupt to Host Mask
  735.  47h    Set Baud, Data, Stop and Parity
  736.  48h    Send Break
  737.  49h    Set Modem Lines
  738.  4Ah    Set Break Count
  739.  4Bh    Set Handshake
  740.  4Ch    Set Xon/Xoff Characters
  741.  4Dh    Set Transmit Mid Water Mark
  742.  4Eh    IRQ Polling Timer to Host
  743.  4Fh    Buffer Set All
  744.  50h    Port On
  745.  51h    Port Off
  746.  52h    Receive Pause
  747.  53h    Special Character Interrupt
  748.  54h    RS-422 Enable
  749. --------S-1416-------------------------------
  750. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - LINK TO ANOTHER SERIAL DRIVER
  751.     AH = 16h
  752.     ES:BX -> calling driver's INT 14 entry point
  753. Return: nothing
  754. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  755.       operating system by The Software Link, Inc.
  756. --------S-1417-------------------------------
  757. INT 14 - FOSSIL - REBOOT SYSTEM
  758.     AH = 17h
  759.     AL = method
  760.         00h = cold boot
  761.         01h = warm boot
  762. SeeAlso: INT 19
  763. --------S-1417-------------------------------
  764. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - WRITE MODEM CONTROL REGISTER
  765.     AH = 17h
  766.     AL = new value for UART's modem control register
  767.     DX = port number
  768. Return: nothing
  769. --------S-1418-------------------------------
  770. INT 14 - FOSSIL - READ BLOCK
  771.     AH = 18h
  772.     CX = maximum number of characters to transfer
  773.     DX = port number
  774.     ES:DI -> user buffer
  775. Return: AX = number of characters transferred
  776. SeeAlso: AH=19h"FOSSIL",AH=83h"COURIERS",AX=FF02h,INT 6B/AX=0100h
  777. --------S-1418-------------------------------
  778. INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND
  779.     AH = 18h
  780.     ES:BX -> 16-byte command string
  781.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  782. Return: AH = status
  783.         00h successful
  784.         80h timeout
  785.     AL = mailbox status
  786.         00h no errors
  787.         8Xh BIOS error
  788.     ES:BX buffer filled in with mailbox string
  789.     ZF clear if no errors
  790.     ZF set if either status byte contains an error code
  791. SeeAlso: AH=16h"Digiboard"
  792. --------S-1418-------------------------------
  793. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - GET DRIVER DESCRIPTION
  794.     AH = 18h
  795.     DX = port number
  796. Return: DS:BX -> 40-byte buffer containing a string identifying the serial
  797.         driver
  798. SeeAlso: AH=06h"PC-MOS"
  799. --------S-1419-------------------------------
  800. INT 14 - FOSSIL - WRITE BLOCK
  801.     AH = 19h
  802.     CX = maximum number of characters to transfer
  803.     DX = port number
  804.     ES:DI -> user buffer
  805. Return: AX = number of characters transferred
  806. SeeAlso: AH=18h"FOSSIL",AH=86h,INT 6B/AX=0000h
  807. --------S-1419-------------------------------
  808. INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT
  809.     AH = 19h
  810.     BL = flag
  811.         00h disable special character interrupt
  812.         FFh enable interrupt
  813.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  814. Return: AH = status
  815.         00h successful
  816.         FFh failed
  817. SeeAlso: AH=1Ah"Digiboard"
  818. --------S-1419-------------------------------
  819. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - SELECTIVE BUFFER FLUSH
  820.     AH = 19h
  821.     AL = what to flush
  822.         bit 0: input buffer
  823.         bit 1: output buffer
  824.     DX = port number
  825. Return: nothing
  826. SeeAlso: AH=09h"PC-MOS"
  827. --------S-141A-------------------------------
  828. INT 14 - FOSSIL - BREAK BEGIN OR END
  829.     AH = 1Ah
  830.     AL = 00h stop sending 'break'
  831.          01h start sending 'break'
  832.     DX = port number
  833. SeeAlso: AH=06h"FOSSIL",AH=8Ah,AH=FAh
  834. --------S-141A-------------------------------
  835. INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER
  836.     AH = 1Ah
  837.     BX = subfunction
  838.         00h return pointer to special character flag byte
  839.         01h return pointer to special character counter word
  840.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  841. Return: ES:BX -> special character flag or counter
  842. Notes:    flag is FFh if one or more special characters are in the receive
  843.       buffer; it is 00h and the counter is invalid if no special characters
  844.       are in the receive buffer
  845.     counter (if valid) contains the number of characters in the receive
  846.       buffer up to and including the last-received special character
  847. --------S-141B-------------------------------
  848. INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
  849.     AH = 1Bh
  850.     DX = port number
  851.     CX = size of user buffer
  852.     ES:DI -> user buffer for driver info (see below)
  853. Return: AX = number of characters transferred
  854.     CX = 3058h ("0X") (X00 FOSSIL only)
  855.     DX = 2030h (" 0") (X00 FOSSIL only)
  856.  
  857. Format of driver info:
  858. Offset    Size    Description
  859.  00h    WORD    size of structure in bytes
  860.  02h    BYTE    FOSSIL spec driver conforms to
  861.  03h    BYTE    revision level of this specific driver
  862.  04h    DWORD    pointer to ASCIZ identification string
  863.  08h    WORD    size of the input buffer
  864.  0Ah    WORD    number of bytes left in buffer
  865.  0Ch    WORD    size of the output buffer
  866.  0Eh    WORD    number of bytes left in buffer
  867.  10h    BYTE    width of screen
  868.  11h    BYTE    length of screen
  869.  12h    BYTE    actual baud rate, computer to modem
  870. --------S-141C-------------------------------
  871. INT 14 - X00 FOSSIL - ACTIVATE PORT
  872.     AH = 1Ch
  873.     DX = port number
  874. Return: AX = 1954h if successful
  875.     BL = maximum function number supported (not including 7Eh and above)
  876.     BH = revision of FOSSIL specification supported
  877. Note:    this is a duplicate of AH=04h, so that AH=04h may be made compatible
  878.       with the PS/2 BIOS in a future release
  879. SeeAlso: AH=04h"FOSSIL",AH=1Dh
  880. --------S-141D-------------------------------
  881. INT 14 - X00 FOSSIL - DEACTIVATE PORT
  882.     AH = 1Dh
  883.     DX = port number
  884. Return: none
  885. Notes:    this is a duplicate of AH=05h, so that AH=05h may be made compatible
  886.       with the PS/2 BIOS in a future release
  887.     ignored if the port was never activated with AH=04h or AH=1Ch
  888. SeeAlso: AH=05h"FOSSIL",AH=1Ch
  889. --------S-141E-------------------------------
  890. INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION
  891.     AH = 1Eh
  892.     AL = break status
  893.         00h if break
  894.         01h if no break
  895.     BH = parity (see below)
  896.     BL = number of stop bits
  897.         00h one stop bit
  898.         01h two stop bits (1.5 if 5 bit word length)
  899.     CH = word length (see below)
  900.     CL = bps rate (see below)
  901.     DX = port number
  902. Return: AX = port status code (see AH=00h)
  903. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=04h call
  904.     if the port was locked at X00 load time, the appropriate parameters are
  905.       ignored
  906. SeeAlso: AH=00h,AH=04h"SERIAL I/O"
  907.  
  908. Values for parity:
  909.  00h    no parity
  910.  01h    odd parity
  911.  02h    even parity
  912.  03h    stick parity odd
  913.  04h    stick parity even
  914.  
  915. Values for word length:
  916.  00h    5 bits
  917.  01h    6 bits
  918.  02h    7 bits
  919.  03h    8 bits
  920.  
  921. Values for bps rate:
  922.  00h    110
  923.  01h    150
  924.  02h    300
  925.  03h    600
  926.  04h    1200
  927.  05h    2400
  928.  06h    4800
  929.  07h    9600
  930.  08h    19200
  931. --------S-141F-------------------------------
  932. INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL
  933.     AH = 1Fh
  934.     AL = 00h read modem control register
  935.           Return: BL = modem control register (see below)
  936.               AH = status
  937.     AL = 01h write modem control register
  938.           BL = modem control register (see below)
  939.           Return: AX = status
  940.     DX = port number
  941. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=05h call
  942.     X00 forces BL bit 3 set (interrupts cannot be disabled)
  943. SeeAlso: AH=00h,AH=05h"SERIAL I/O"
  944.  
  945. Bitfields for modem control register:
  946.  bit 0    data terminal ready
  947.  bit 1    request to send
  948.  bit 2    OUT1
  949.  bit 3    OUT2 (interrupts) enabled
  950.  bit 4    LOOP
  951.  bits 5-7 reserved
  952. --------S-1420-------------------------------
  953. INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT
  954.     AH = 20h
  955.     DX = port number
  956. Return: AH = 00h if character was available
  957.         AL = next character (removed from receive buffer)
  958.     AX = FFFFh if no character available
  959. SeeAlso: AH=0Ch,AH=21h"X00"
  960. --------S-1420-------------------------------
  961. INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT
  962.     AH = 20h
  963.     AL = logical port (01h COM1, 02h COM2)
  964.     DX = physical port number
  965. Return: AX = status
  966.         0000h successful
  967.         FFFFh failed
  968. SeeAlso: AH=21h"Alloy",AH=22h"Alloy",AH=23h"Alloy",INT 17/AH=8Bh"Alloy"
  969. --------S-1420-------------------------------
  970. INT 14 - MultiDOS Plus - INITIALIZE PORT
  971.     AH = 20h
  972.     AL = port parameters (see AH=00h"SERIAL")
  973.     DX = port number (0-3)
  974. Return: AH = status
  975.         00h successful
  976.         41h no such port
  977.         64h monitor mode already active
  978. SeeAlso: AH=00h"SERIAL",AH=04h"MultiDOS",AH=21h"MultiDOS",AH=23h"MultiDOS"
  979. --------S-1420-------------------------------
  980. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - CHECK OUTPUT QUEUE
  981.     AH = 20h
  982.     DX = port number
  983. Return: AX = number of bytes in output buffer
  984. SeeAlso: AH=0Ah"PC-MOS"
  985. --------S-1421-------------------------------
  986. INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER
  987.     AH = 21h
  988.     AL = character
  989.     DX = port number
  990. Notes:    the given character is inserted at the end of the receive buffer as if
  991.       it had just arrived from the serial port; all normal receive
  992.       processing (XON/XOFF, ^C/^K) is performed on the character
  993.     fully re-entrant
  994. SeeAlso: AH=20h"X00"
  995. --------S-1421-------------------------------
  996. INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT
  997.     AH = 21h
  998.     DX = physical port number
  999. Return: AX = status
  1000.         0000h successful
  1001.         FFFFh failed
  1002. SeeAlso: AH=20h"Alloy",AH=22h"Alloy"
  1003. --------S-1421-------------------------------
  1004. INT 14 - MultiDOS Plus - TRANSMIT CHARACTER
  1005.     AH = 21h
  1006.     AL = character to send
  1007.     DX = port number
  1008. Return: AH = status (see below)
  1009. Note:    monitor mode must have been turned on with AH=24h before calling
  1010. SeeAlso: AH=20h"MultiDOS",AH=22h"MultiDOS",AH=24h"MultiDOS"
  1011.  
  1012. Values for status:
  1013.  00h    successful
  1014.  39h    no DSR or CTS
  1015.  3Ch    no DSR
  1016.  3Bh    no CTS
  1017.  41h    no such port
  1018.  42h    monitor mode not active
  1019.  97h    timed out
  1020. --------S-1421-------------------------------
  1021. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - OUTPUT CHARACTER, WITH TIMEOUT
  1022.     AH = 21h
  1023.     AL = char to send
  1024.     DX = port number
  1025.     SI = timeout in timer ticks (0000h = default)
  1026. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  1027.       operating system by The Software Link, Inc.
  1028. SeeAlso: AH=01h,AH=0Eh"PC/MOS",AH=22h"PC-MOS"
  1029. --------S-1422-------------------------------
  1030. INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT
  1031.     AH = 22h
  1032.     AL = logical port (01h COM1, 02h COM2)
  1033. Return: AX = status (0000h successful)
  1034. SeeAlso: AH=20h"Alloy",AH=21h"Alloy"
  1035. --------S-1422-------------------------------
  1036. INT 14 - MultiDOS Plus - RECEIVE CHARACTER
  1037.     AH = 22h
  1038.     DX = port number
  1039. Return: AH = status (see also AH=21h"MultiDOS")
  1040.         00h successful
  1041.         AL = character
  1042.         3Dh framing and parity error
  1043.         3Eh overrun error
  1044.         3Fh framing error
  1045.         40h parity error
  1046.         96h ring buffer overflow
  1047. Note:    if no character is available, this function waits until a character
  1048.       arrives or an implementation-dependent timeout elapses
  1049. SeeAlso: AH=20h"MultiDOS",AH=21h"MultiDOS",AH=27h
  1050. --------S-1422-------------------------------
  1051. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - RECEIVE CHARACTER, WITH TIMEOUT
  1052.     AH = 22h
  1053.     DX = port number
  1054.     SI = timeout in timer ticks (0000h = default)
  1055. Return: AH = port status (see AH=03h bits 0..6)
  1056.          bit 7 = 1 indicates time-out
  1057.     AL = character received
  1058. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  1059.       operating system by The Software Link, Inc.
  1060. SeeAlso: AH=02h,AH=0Fh"PC-MOS",AH=21h"PC-MOS"
  1061. --------S-1423-------------------------------
  1062. INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID
  1063.     AH = 23h
  1064.     AL = logical port (01h COM1, 02h COM2)
  1065.     DH = user ID
  1066.     DL = process ID (DH,DL both FFh for current task)
  1067. Return: AL = MW386 port mode (see below)
  1068.     CX = MW386 port number
  1069.     DH = owner's user ID
  1070.     DL = owner's task ID
  1071. SeeAlso: AH=20h"Alloy",INT 17/AH=8Bh"Alloy"
  1072.  
  1073. Bitfields for MW386 port mode:
  1074.  bit 0    port is shared (spooler only)
  1075.  bit 1    port is spooled instead of direct (spooler only)
  1076.  bit 2    port is assigned as logical COM device, not in spooler
  1077.  bit 3    port is free
  1078. --------S-1423-------------------------------
  1079. INT 14 - MultiDOS Plus - GET PORT STATUS
  1080.     AH = 23h
  1081.     DX = port number
  1082. Return: AH = line status (see AH=03h)
  1083.     AL = modem status (see AH=03h)
  1084. SeeAlso: AH=03h,AH=07h"MultiDOS",AH=20h"MultiDOS"
  1085. --------S-1423-------------------------------
  1086. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - DECLARE PORT OWNERSHIP
  1087.     AH = 23h
  1088.     DX = port number
  1089.     BX = TCB segment/selector address of owner task
  1090. Return: nothing
  1091. SeeAlso: AH=0Dh"PC-MOS"
  1092. --------S-1424-------------------------------
  1093. INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS
  1094.     AH = 24h
  1095.     CX = physical I/O port number
  1096.     DS:DX -> configuration table (see below)
  1097. Return: AH = 00h
  1098. Note:    invalid port numbers are merely ignored
  1099. SeeAlso: INT 17/AH=96h
  1100.  
  1101. Format of configuration table:
  1102. Offset    Size    Description
  1103.  00h    BYTE    baud rate (see below)
  1104.  01h    BYTE    data bits (00h=5, 01h=6, 02h=7, 03h=8)
  1105.  02h    BYTE    parity (00h none, 01h odd, 02h even)
  1106.  03h    BYTE    stop bits (00h=1, 01h=2)
  1107.  04h    BYTE    receive flow control
  1108.         00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS
  1109.  05h    BYTE    transmit flow control (as for receive)
  1110.  
  1111. Values for baud rate:
  1112.  00h    38400
  1113.  01h    19200
  1114.  02h    9600
  1115.  03h    7200
  1116.  04h    4800
  1117.  05h    3600
  1118.  06h    2400
  1119.  07h    2000
  1120.  08h    1200
  1121.  09h    600
  1122.  0Ah    300
  1123.  0Bh    150
  1124.  0Ch    134.5
  1125. --------S-1424-------------------------------
  1126. INT 14 - MultiDOS Plus - SET MONITOR MODE
  1127.     AH = 24h
  1128.     AL = port status storage
  1129.         00h single status for entire receive buffer
  1130.         01h separate status kept for each byte in receive buffer
  1131.     DX = port number
  1132. Return: AH = status
  1133.         00h successful
  1134.         3Ah invalid status storage specified
  1135.         41h no such port
  1136.         64h monitor mode already active
  1137. Note:    in monitor mode, MultiDOS redirects all BIOS video output to a serial
  1138.       port
  1139. SeeAlso: AH=20h"MultiDOS",AH=25h
  1140. --------S-1424-------------------------------
  1141. INT 14 - PC-MOS/386 v5.01 $serial.sys v5.04 - ???
  1142.     AH = 24h
  1143. Return: ???
  1144. Program: PC-MOS/386 v5.01 is a multitasking, multiuser MS-DOS 5.0-compatible
  1145.       operating system by The Software Link, Inc.
  1146. --------S-1425-------------------------------
  1147. INT 14 - MultiDOS Plus - CLEAR BUFFERS
  1148.     AH = 25h
  1149.     AL = function
  1150.         00h only clear buffers
  1151.         01h clear buffers and deactivate
  1152.     DX = port number
  1153. Return: AH = status
  1154.         00h successful
  1155.         3Ah invalid function
  1156.         41h no such port
  1157.         42h monitor mode not active
  1158. SeeAlso: AH=20h"MultiDOS",AH=24h"MultiDOS"
  1159. --------S-1427-------------------------------
  1160. INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT
  1161.     AH = 27h
  1162.     DX = port number
  1163. Return: AH = status
  1164.         00h successful
  1165.         41h no such port
  1166.         42h monitor mode not active
  1167.     AL = number of characters in receive buffer
  1168. --------S-1456-------------------------------
  1169. INT 14 U - BWCOM14 - INSTALLATION CHECK
  1170.     AH = 56h
  1171. Return: CX = 0001h if installed
  1172. Program: BWCOM14 is a network serial port emulator (simulating a Hayes modem
  1173.       connected to the serial port) distributed as part of the
  1174.       Beame&Whiteside BW-NFS package
  1175. SeeAlso: AH=57h,AH=58h
  1176. --------S-1457-------------------------------
  1177. INT 14 U - BWCOM14 - INITIALIZE
  1178.     AH = 57h
  1179.     DL = port number
  1180. Return: AL = initialization status (00h successful, 01h already initialized)
  1181.     CX = port status (0001h port redirected, 0002h and FFFFh failed)
  1182. Note:    after this call, all invocations of INT 14/AH=00h-03h for the specified
  1183.       port will be handled by BWCOM14 until AH=58h is called
  1184. SeeAlso: AH=00h"SERIAL",AH=56h,AH=58h
  1185. --------S-1458-------------------------------
  1186. INT 14 U - BWCOM14 - SHUTDOWN
  1187.     AH = 58h
  1188. Return: CX = status (0001h successful, 0002h not initialized)
  1189. Note:    after this call, BWCOM14 will no longer redirect the COM port
  1190. SeeAlso: AH=56h,AH=57h
  1191. --------S-147E-------------------------------
  1192. INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
  1193.     AH = 7Eh
  1194.     AL = code assigned to external application (80h-BFh)
  1195.         80h reserved for communications FOSSIL
  1196.         81h video FOSSIL
  1197.         82h reserved for keyboard FOSSIL
  1198.         83h reserved for system FOSSIL
  1199.     ES:DX -> entry point
  1200. Return: AX = 1954h
  1201.     BL = code assigned to application (same as input AL)
  1202.     DH = 00h failed
  1203.          01h successful
  1204. SeeAlso: AH=7Fh,AH=80h"FOSSIL",AX=8100h,AH=82h"FOSSIL",AH=83h"FOSSIL"
  1205. --------S-147F-------------------------------
  1206. INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
  1207.     AH = 7Fh
  1208.     AL = code assigned to external application
  1209.     ES:DX -> entry point
  1210. Return: AX = 1954h
  1211.     BL = code assigned to application (same as input AL)
  1212.     DH = 00h failed
  1213.          01h successful
  1214. SeeAlso: AH=7Eh
  1215. --------S-1480-------------------------------
  1216. INT 14 - COMMUNICATIONS FOSSIL
  1217.     AH = 80h
  1218. SeeAlso: AH=7Eh
  1219. --------S-1480-------------------------------
  1220. INT 14 - COURIERS.COM - INSTALLATION CHECK
  1221.     AH = 80h
  1222. Return: AH = E8h if loaded
  1223. Program: COURIERS is a TSR utility by PC Magazine
  1224. --------S-148000-----------------------------
  1225. INT 14 - ARTICOM - INSTALLATION CHECK
  1226.     AX = 8000h
  1227. Return: AL = FFh if installed
  1228.         BH = major version
  1229.         BL = minor version
  1230. Program: ArtiCom is an asynchronous communications driver by Artisoft which
  1231.       works on top of NetBIOS and allows modem/serial-port sharing by
  1232.       programs using INT 14 for serial I/O.
  1233. Note:    ArtiCom supports 32 simultaneous COM ports using multiport cars and
  1234.       drivers
  1235. SeeAlso: AH=00h,AH=01h,AH=02h,AH=03h,AH=04h,AH=05h,AX=8001h,AX=8002h
  1236. --------S-148001-----------------------------
  1237. INT 14 - ARTICOM - UNLOAD ASYNCHRONOUS REDIRECTOR FROM MEMORY
  1238.     AX = 8001h
  1239. Return: AX = error code, if error (see AX=8003h)
  1240. SeeAlso: AX=8000h,AX=8002h,AX=8003h
  1241. Index:    uninstall;ARTICOM
  1242. --------S-148002-----------------------------
  1243. INT 14 - ARTICOM - GET ASYNCHRONOUS REDIRECTOR STATUS
  1244.     AX = 8002h
  1245.     ES:DI -> buffer for redirector status structure (see below)
  1246. Return: AX = error code, if error (see AX=8003h)
  1247. SeeAlso: AX=8000h,AX=8003h
  1248.  
  1249. Format of redirector status:
  1250. Offset    Size    Description
  1251.  00h    WORD    redirector major and minor version numbers
  1252.  02h    WORD    redirectable ports found
  1253.  04h    WORD    redirectable ports + local ports found
  1254.  06h    WORD    redirector internal buffer size
  1255.  08h    WORD    maximum servers maintained
  1256.  0Ah    WORD    number of adapters found
  1257. --------S-148003-----------------------------
  1258. INT 14 - ARTICOM - TRANSLATE ERROR CODE TO ERROR STRING
  1259.     AX = 8003h
  1260.     CX = error number to translate
  1261. Return: ES:DI -> ASCIZ error text or NULL if can't translate.
  1262. SeeAlso: AX=8000h
  1263.  
  1264. Values for error codes:
  1265.  00h    "No error"
  1266.  01h    "An invalid port number was specified"
  1267.  02h    "Port is already redirected"
  1268.  03h    "Too many ports redirected"
  1269.  04h    "Cannot locate the server"
  1270.  05h    "Server is busy"
  1271.  06h    "Access denied"
  1272.  07h    "Resource in use"
  1273.  08h    "Resource in use - request queued"
  1274.  09h    "No such resource"
  1275.  0Ah    "Invalid username/password pair"
  1276.  0Bh    "Noncompatible version number"
  1277.  0Ch    "Can't remove from memory"
  1278.  0Dh    "Bad NETBIOS adapter number"
  1279.  0Eh    "No more entries in list"
  1280.  0Fh    "Resource is not available at this time"
  1281.  10h    "Invalid value to INT 14 call"
  1282. --------S-148004-----------------------------
  1283. INT 14 - ARTICOM - ATTACH ASYNCHRONOUS RESOURCE
  1284.     AX = 8004h
  1285.     DX = port to redirect (COM1=0, COM2=1, ...)
  1286.     CH = attach type
  1287.     CL = adapter to use for attach, 0FFh to search all
  1288.     ES:DI -> attachment structure (see below)
  1289. Return: AX = error code, if error (see AX=8003h)
  1290. Note:    The wildcard '*' is supported in the server and resource fields.  If
  1291.       wild cards are used then the first matching available server is
  1292.       attached.
  1293. SeeAlso: AX=8000h,AX=8003h,AX=8005h
  1294.  
  1295. Format of attachment structure:
  1296. Offset    Size    Description
  1297.  00h 16 BYTEs    server to look for attach
  1298.  10h 16 BYTEs    attach to resource name
  1299.  20h 16 BYTEs    username for attach
  1300.  30h 16 BYTEs    password for username or resource
  1301.  40h    BYTE    attach type
  1302.         00h normal
  1303.         01h queue if resource is in use (not yet supported in v1.00)
  1304. --------S-148005-----------------------------
  1305. INT 14 - ARTICOM - DETACH ASYNCHRONOUS RESOURCE
  1306.     AX = 8005h
  1307.     DX = port to detach (COM1=0, COM2=1, ...)
  1308. Return: AX = error code, if error (see AX=8003h)
  1309. Note:    only a previously attached resource can be detached
  1310. SeeAlso: AX=8000h,AX=8003h,AX=8004h
  1311. --------S-148006-----------------------------
  1312. INT 14 - ARTICOM - GET RESOURCE INFORMATION
  1313.     AX = 8006h
  1314.     BX = remote port (COM1=0, COM2=1, ...)
  1315.     CL = adapter number, FFH to try all adapters
  1316.     ES:DI -> resource information structure (see below)
  1317.     DS:SI -> 16 byte server name. See note.
  1318. Return: AX = error code, if error (see AX=8003h)
  1319.     BX = next remote port, recall to get next resource info
  1320. Note:    Wild cards supported in both the resource field and server name
  1321.     string DS:SI. If wild cards used then first matching available
  1322.     resource information is searched. Set resource field to 0FFh to
  1323.     return all resources.
  1324. SeeAlso: AX=8000h,AX=8002h,AX=8003h,AX=8007h
  1325.  
  1326. Format of resource information structure:
  1327. Offset    Size    Description
  1328.  00h    BYTE    00h = free, else used
  1329.  01h 16 BYTEs    resource name
  1330.  11h 16 BYTEs    username of resource user
  1331.  21h    WORD    amount of time used
  1332.  23h    WORD    amount of time remaining
  1333.  53h 48 BYTEs    description of resource
  1334.  93h 64 BYTEs    initialization string for modem
  1335.  B3h 32 BYTEs    dial string for modem
  1336.  D3h 32 BYTEs    hang-up string for modem
  1337. --------S-148007-----------------------------
  1338. INT 14 - ARTICOM - GET REDIRECTED PORT INFORMATION
  1339.     AX = 8007h
  1340.     DX = port index (COM1=0, COM2=1, ...)
  1341.     ES:DI -> buffer for port information structure (see below)
  1342. Return: CF clear if redirection info returned and port is redirected
  1343.     CF set if not a redirected port
  1344.     AX = error code, if error (see AX=8003h)
  1345. SeeAlso: AX=8000h,AX=8003h,AX=8006h,AX=8008h
  1346.  
  1347. Format of port information structure:
  1348. Offset    Size    Description
  1349.  00h 16 BYTEs    server name resource is on
  1350.  10h    BYTE    adapter number server is on
  1351.  11h 16 BYTEs    resource name
  1352.  21h    WORD    remote port index, use to get additional information
  1353.  23h    WORD    buffer size
  1354.  25h    WORD    baud rate (see below)
  1355.  26h    BYTE    modem status register
  1356.  27h    BYTE    modem control register
  1357.  28h    BYTE    line status register
  1358.  29h    BYTE    line control register
  1359.  2Ah    BYTE    flow control in use: 0 - NONE, 1 - XON/XOFF, 2 - RTS/CTS
  1360.  2Bh    WORD    send timeout in ticks
  1361.  2Dh    WORD    receive timeout in ticks
  1362.  2Fh    WORD    time used on remote port
  1363.  31h    WORD    time left before timeout
  1364.  33h    BYTE    if server changes allowed?
  1365.  34h    WORD    FFFFh (-1) if connection ok, else old port index
  1366.  
  1367. Values for baud rate:
  1368.  00h    110
  1369.  01h    150
  1370.  02h    300
  1371.  03h    600
  1372.  04h    1200
  1373.  05h    2400
  1374.  06h    4800
  1375.  07h    9600
  1376.  08h    19200
  1377.  09h    38400
  1378.  0Ah    57600
  1379.  0Bh    115200
  1380.  0Ch    134.5
  1381.  0Dh    1800
  1382.  0Eh    2000
  1383.  0Fh    3600
  1384.  10h    7200
  1385. --------S-148008-----------------------------
  1386. INT 14 - ARTICOM - GET AVAILABLE SERVER NAME
  1387.     AX = 8008h
  1388.     BX = server index (0,1,...)
  1389.     ES:DI -> server name structure (see below)
  1390. Return: AX = error code, if error (see AX=8003h)
  1391.     BX = next remote port, repeat call to get next available server
  1392. Note:    the wildcard '*' is supported in the server name field.     Set the
  1393.       server name to FFh to search for all servers.
  1394. SeeAlso: AX=8000h,AX=8003h,AX=8007h
  1395.  
  1396. Format of server name structure:
  1397. Offset     Size      Description
  1398.   00h 16 BYTEs      (call) ASCIZ servername
  1399.   10h     BYTE      (return) the adapter server is found
  1400. --------S-148009-----------------------------
  1401. INT 14 - ARTICOM - SET SEND AND RECEIVE TIMEOUTS
  1402.     AX = 8009h
  1403.     BX = send timeout in ticks
  1404.     CX = receive timeout in ticks
  1405.     DX = port index (COM1=0, COM2=1, ...)
  1406. Return: nothing
  1407. SeeAlso: AX=8000h,AX=800Ah
  1408. --------S-14800A-----------------------------
  1409. INT 14 - ARTICOM - MODIFY FLOW CONTROL
  1410.     AX = 800Ah
  1411.     BL = flow control type (00h none, 01h XON/XOFF, 02h RTS/CTS)
  1412.     DX = port index (COM1=0, COM2=1, ...)
  1413. Return: AX = error code, if error (see AX=8003h)
  1414. Note:    for attached ports only!
  1415. SeeAlso: AX=8000h,AX=8003h,AX=8009h
  1416. --------S-148025-----------------------------
  1417. INT 14 - ARTICOM - SET INTERNAL SEND/RECEIVE VECTOR
  1418.     AX = 8025h
  1419.     DS:DX -> address of trap function (see below) to call on read/write
  1420. Note:    setting the vector to a user function allows the redirector's activity
  1421.       to be monitored.
  1422. SeeAlso: AX=8000h,AX=8035h,INT 21/AH=25h
  1423.  
  1424. Trap function called with:
  1425.     AH = operation
  1426.         80h reading character
  1427.         81h writing character
  1428.     AL = character
  1429.     Return: AX must be preserved
  1430.         far JUMP to old trap function (see AX=8035h)
  1431. --------S-148035-----------------------------
  1432. INT 14 - ARTICOM - GET INTERNAL SEND/RECEIVE VECTOR
  1433.     AX = 8035h
  1434. Return: ES:BX -> address of current send/receive routine
  1435. Note:    this function returns the address of the routine which is called
  1436.       inside A-REDIR.EXE each time a character is received or sent on the
  1437.       active COM port.
  1438. SeeAlso: AX=8000h,AX=8025h,INT 21/AH=35h
  1439. --------S-1481-------------------------------
  1440. INT 14 - COURIERS.COM - CHECK IF PORT BUSY
  1441.     AH = 81h
  1442.     AL = port number (1-4)
  1443. Return: AH = 00h port available
  1444.          01h port exists but already in use
  1445.          02h port nonexistent
  1446. Program: COURIERS is a TSR utility by PC Magazine
  1447. SeeAlso: AH=83h,AH=8Dh
  1448. --------S-1481-------------------------------
  1449. INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION
  1450.     AH = 81h
  1451.     BX:DI -> port control block
  1452. Return: ???
  1453. SeeAlso: AH=00h
  1454.  
  1455. Format of port control block:
  1456. Offset    Type    Description
  1457.  00h    WORD    port IO address
  1458.  02h    WORD    port IRQ
  1459.  04h    WORD    baud rate
  1460.  06h    WORD    parity
  1461.  08h    WORD    data bits
  1462.  0Ah    WORD    stop bits
  1463.  0Ch    WORD    break status
  1464.         0000h off
  1465.  0Eh    WORD    flow control protocol
  1466.  10h    BYTE    input block
  1467.  11h    BYTE    output block
  1468.  12h    WORD    low threshold
  1469.  14h    WORD    high threshold
  1470.  16h    WORD    segment of buffer
  1471.  18h    WORD    offset of buffer
  1472.  1Ah    WORD    input buffer length
  1473.  1Ch    WORD    output buffer length
  1474.  1Eh    BYTE    auxiliary address
  1475.  1Fh    BYTE    spare
  1476.  20h  4 WORDs    spares
  1477. --------V-148100-----------------------------
  1478. INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION
  1479.     AX = 8100h
  1480.     ES:DI -> buffer for VFOSSIL information (see below)
  1481. Return: AX = 1954h if installed
  1482. SeeAlso: AH=7Eh,AX=8101h
  1483.  
  1484. Format of VFOSSIL information:
  1485. Offset    Size    Description
  1486.  00h    WORD    size of information in bytes, including this field
  1487.  02h    WORD    VFOSSIL major version
  1488.  04h    WORD    VFOSSIL revision level
  1489.  06h    WORD    highest VFOSSIL application function supported
  1490. --------V-148101-----------------------------
  1491. INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
  1492.     AX = 8101h
  1493.     ES:DI -> buffer for application function table (see below)
  1494.     CX = length of buffer in bytes
  1495. Return: AX = 1954h if installed
  1496.         BH = highest VFOSSIL application function supported
  1497. Note:    the number of initialized pointers in the application function table
  1498.       will never exceed CX/4; if the buffer is large enough, BH+1 pointers
  1499.       will be initialized
  1500. SeeAlso: AX=8102h
  1501.  
  1502. Format of application function table:
  1503. Offset    Size    Description
  1504.  00h    DWORD    -> function to query current video mode (VioGetMode)
  1505.  04h    DWORD    -> function to set video mode (VioSetMode)
  1506.  08h    DWORD    -> function to query hardware config (VioGetConfig)
  1507.  0Ch    DWORD    -> function to write data in TTY mode (VioWrtTTY)
  1508.  10h    DWORD    -> function to get current ANSI state (VioGetANSI)
  1509.  14h    DWORD    -> function to set new ANSI state (VioSetANSI)
  1510.  18h    DWORD    -> function to get curr cursor position (VioGetCurPos)
  1511.  1Ch    DWORD    -> function to set cursor position (VioSetCurPos)
  1512.  20h    DWORD    -> function to get cursor shape (VioGetCurType)
  1513.  24h    DWORD    -> function to set cursor shape (VioSetCurType)
  1514.  28h    DWORD    -> function to scroll screen up (VioScrollUp)
  1515.  2Ch    DWORD    -> function to scroll screen down (VioScrollDn)
  1516.  30h    DWORD    -> function to read cell string from screen (VioReadCellStr)
  1517.  34h    DWORD    -> function to read char string from screen (VioReadCharStr)
  1518.  38h    DWORD    -> function to write a cell string (VioWrtCellStr)
  1519.  3Ch    DWORD    -> function to write char string, leaving attr (VioWrtCharStr)
  1520.  40h    DWORD    -> function to write char string,const attr (VioWrtCharStrAttr)
  1521.  44h    DWORD    -> function to replicate an attribute (VioWrtNAttr)
  1522.  48h    DWORD    -> function to replicate a cell (VioWrtNCell)
  1523.  4Ch    DWORD    -> function to replicate a character (VioWrtNChar)
  1524.  
  1525. Format of video mode data structure:
  1526. Offset    Size    Description
  1527.  00h    WORD    length of structure including this field
  1528.  02h    BYTE    mode characteristics
  1529.         bit 0: clear if MDA, set otherwise
  1530.         bit 1: graphics mode
  1531.         bit 2: color disabled (black-and-white)
  1532.  03h    BYTE    number of colors supported (1=2 colors, 4=16 colors, etc)
  1533.  04h    WORD    number of text columns
  1534.  06h    WORD    number of text rows
  1535.  08h    WORD    reserved
  1536.  0Ah    WORD    reserved
  1537.  0Ch    DWORD    reserved
  1538.  
  1539. Format of video configuration data:
  1540. Offset    Size    Description
  1541.  00h    WORD    structure length including this field
  1542.  02h    WORD    adapter type
  1543.         00h monochrome/printer
  1544.         01h CGA
  1545.         02h EGA
  1546.         03h VGA
  1547.         07h 8514/A
  1548.  04h    WORD    display type
  1549.         00h monochrome
  1550.         01h color
  1551.         02h enhanced color
  1552.         09h 8514
  1553.  06h    DWORD    adapter memory size
  1554.  
  1555. Format of cursor type record:
  1556. Offset    Size    Description
  1557.  00h    WORD    cursor start line
  1558.  02h    WORD    cursor end line
  1559.  04h    WORD    cursor width (always 01h)
  1560.  06h    WORD    cursor attribute (FFFFh = hidden)
  1561.  
  1562. Call VioGetMode with:
  1563.     STACK:    WORD    VIO handle (must be 00h)
  1564.         DWORD    pointer to video mode data structure (see above)
  1565. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see below)
  1566.  
  1567. Values for error code:
  1568.  0000h    successful
  1569.  0074h    internal VIO failure
  1570.  0163h    unsupported mode
  1571.  0166h    invalid row value
  1572.  0167h    invalid column value
  1573.  017Eh    buffer too small
  1574.  01A5h    invalid VIO parameter
  1575.  01B4h    invalid VIO handle
  1576.  
  1577. Call VioSetMode with:
  1578.     STACK:    WORD    VIO handle (must be 00h)
  1579.         DWORD    pointer to video mode data structure (see above)
  1580. Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)
  1581.  
  1582. Call VioGetConfig with:
  1583.     STACK:    WORD    VIO handle (must be 00h)
  1584.         DWORD    pointer to video configuration data buffer (see above)
  1585. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)
  1586.  
  1587. Call VioWrtTTY with:
  1588.     STACK:    WORD    VIO handle (must be 00h)
  1589.         WORD    length of string
  1590.         DWORD    pointer to character string to be written to screen
  1591. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1592. Notes:    write wraps at end of line and terminates if it reaches end of screen
  1593.     in ANSI mode, ANSI control sequences are interpreted, and this func is
  1594.       not required to be reentrant; in non-ANSI mode, the function is
  1595.       reentrant and may be called from within an MS-DOS function call
  1596.  
  1597. Call VioGetANSI with:
  1598.     STACK:    WORD    VIO handle (must be 00h)
  1599.         DWORD    pointer to WORD which will be set to 00h if ANSI is off
  1600.             or 01h if ANSI is on
  1601. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1602.  
  1603. Call VioSetANSI with:
  1604.     STACK:    WORD    VIO handle (must be 00h)
  1605.         DWORD    pointer to WORD indicating new state of ANSI
  1606.             00h off
  1607.             01h on
  1608. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  1609.  
  1610. Call VioGetCurPos with:
  1611.     STACK:    WORD    VIO handle (must be 00h)
  1612.         DWORD    pointer to WORD to hold current cursor column (0-based)
  1613.         DWORD    pointer to WORD to hold current cursor row (0-based)
  1614. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1615.  
  1616. Call VioSetCurPos with:
  1617.     STACK:    WORD    VIO handle (must be 00h)
  1618.         WORD    cursor column
  1619.         WORD    cursor row
  1620. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1621. Note:    if either coordinate is invalid, the cursor is not moved
  1622.  
  1623. Call VioGetCurType with:
  1624.     STACK:    WORD    VIO handle (must be 00h)
  1625.         DWORD    pointer to cursor type record (see above)
  1626. Return: AX = error code (00h, 74h, 1B4h) (see above)
  1627.  
  1628. Call VioSetCurType with:
  1629.     STACK:    WORD    VIO handle (must be 00h)
  1630.         DWORD    pointer to cursor type record (see above)
  1631. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  1632.  
  1633. Call VioScrollUp with:
  1634.     STACK:    WORD    VIO handle (must be 00h)
  1635.         DWORD    pointer to char/attr cell for filling emptied rows
  1636.         WORD    number or rows to scroll (FFFFh = clear area)
  1637.         WORD    right column of scroll area
  1638.         WORD    bottom row of scroll area
  1639.         WORD    left column of scroll area
  1640.         WORD    top row of scroll area
  1641. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1642.  
  1643. Call VioScrollDn with:
  1644.     STACK:    WORD    VIO handle (must be 00h)
  1645.         DWORD    pointer to char/attr cell for filling emptied rows
  1646.         WORD    number or rows to scroll (FFFFh = clear area)
  1647.         WORD    right column of scroll area
  1648.         WORD    bottom row of scroll area
  1649.         WORD    left column of scroll area
  1650.         WORD    top row of scroll area
  1651. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1652.  
  1653. Call VioReadCellStr with:
  1654.     STACK:    WORD    VIO handle (must be 00h)
  1655.         WORD    column at which to start reading
  1656.         WORD    row at which to start reading
  1657.         DWORD    pointer to WORD containing length of buffer in bytes
  1658.             on return, WORD contains number of bytes actually read
  1659.         DWORD    pointer to buffer for cell string
  1660. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  1661.  
  1662. Call VioReadCharStr with:
  1663.     STACK:    WORD    VIO handle (must be 00h)
  1664.         WORD    column at which to start reading
  1665.         WORD    row at which to start reading
  1666.         DWORD    pointer to WORD containing length of buffer in bytes
  1667.             on return, WORD contains number of bytes actually read
  1668.         DWORD    pointer to buffer for character string
  1669. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  1670.  
  1671. Call VioWrtCellStr with:
  1672.     STACK:    WORD    VIO handle (must be 00h)
  1673.         WORD    column at which to start writing
  1674.         WORD    row at which to start writing
  1675.         WORD    length of cell string in bytes
  1676.         DWORD    pointer to cell string to write
  1677. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1678. Note:    write wraps at end of line and terminates if it reaches end of screen
  1679.  
  1680. Call VioWrtCharStr with:
  1681.     STACK:    WORD    VIO handle (must be 00h)
  1682.         WORD    column at which to start writing
  1683.         WORD    row at which to start writing
  1684.         WORD    length of character string
  1685.         DWORD    pointer to character string to write
  1686. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1687. Note:    write wraps at end of line and terminates if it reaches end of screen
  1688.  
  1689. Call VioWrtCharStrAttr with:
  1690.     STACK:    WORD    VIO handle (must be 00h)
  1691.         DWORD    pointer to attribute to be applied to each character
  1692.         WORD    column at which to start writing
  1693.         WORD    row at which to start writing
  1694.         WORD    length of character string
  1695.         DWORD    pointer to character string to write
  1696. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1697. Note:    write wraps at end of line and terminates if it reaches end of screen
  1698.  
  1699. Call VioWrtNAttr with:
  1700.     STACK:    WORD    VIO handle (must be 00h)
  1701.         WORD    column at which to start writing
  1702.         WORD    row at which to start writing
  1703.         WORD    number of times to write attribute
  1704.         DWORD    pointer to display attribute to replicate
  1705. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1706. Note:    write wraps at end of line and terminates if it reaches end of screen
  1707.  
  1708. Call VioWrtNCell with:
  1709.     STACK:    WORD    VIO handle (must be 00h)
  1710.         WORD    column at which to start writing
  1711.         WORD    row at which to start writing
  1712.         WORD    number of times to write cell
  1713.         DWORD    pointer to cell to replicate
  1714. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1715. Note:    write wraps at end of line and terminates if it reaches end of screen
  1716.  
  1717. Call VioWrtNChar with:
  1718.     STACK:    WORD    VIO handle (must be 00h)
  1719.         WORD    column at which to start writing
  1720.         WORD    row at which to start writing
  1721.         WORD    number of times to write character
  1722.         DWORD    pointer to character to replicate
  1723. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  1724. Note:    write wraps at end of line and terminates if it reaches end of screen
  1725. --------V-148102-----------------------------
  1726. INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL
  1727.     AX = 8102h
  1728. Return: AX = 1954h
  1729. Note:    terminates all operations; after this call, the video FOSSIL may either
  1730.       be removed from memory or reinitialized
  1731. SeeAlso: AX=8101h,AX=8103h
  1732. --------V-148103-----------------------------
  1733. INT 14 - VIDEO FOSSIL - UNINSTALL
  1734.     AX = 8103h
  1735. Return: AX = 1954h
  1736. Note:    this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM
  1737. --------K-1482-------------------------------
  1738. INT 14 - KEYBOARD FOSSIL
  1739.     AH = 82h
  1740. SeeAlso: AH=7Eh
  1741. --------S-1482-------------------------------
  1742. INT 14 - COURIERS.COM - CONFIGURE PORT
  1743.     AH = 82h
  1744.     AL = port number (1-4)
  1745.     BX = speed (bps)
  1746.     CX = bit flags
  1747.         bit 0: enable input flow control
  1748.         bit 1: enable output flow control
  1749.         bit 2: use X.PC protocol (not yet implemented)
  1750. SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC"
  1751. ----------1483-------------------------------
  1752. INT 14 - SYSTEM FOSSIL
  1753.     AH = 83h
  1754. SeeAlso: AH=7Eh
  1755. --------S-1483-------------------------------
  1756. INT 14 - COURIERS.COM - START INPUT
  1757.     AH = 83h
  1758.     ES:BX -> circular input buffer
  1759.     CX = length of buffer
  1760.         (should be at least 128 bytes if input flow control enabled)
  1761. SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI"
  1762. --------S-1484-------------------------------
  1763. INT 14 - COURIERS.COM - READ CHARACTER
  1764.     AH = 84h
  1765. Return: ZF set if no characters available
  1766.     ZF clear
  1767.        AL = character
  1768.        AH = modem status bits
  1769.         bit 7: set on input buffer overflow
  1770. SeeAlso: AH=02h,AH=86h,AH=89h
  1771. --------S-1485-------------------------------
  1772. INT 14 - COURIERS.COM - FLUSH PENDING INPUT
  1773.     AH = 85h
  1774. SeeAlso: AH=0Ah,AH=88h
  1775. --------S-1486-------------------------------
  1776. INT 14 - COURIERS.COM - START OUTPUT
  1777.     AH = 86h
  1778.     ES:BX -> output buffer
  1779.     CX = length of output buffer
  1780. SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI"
  1781. --------S-1487-------------------------------
  1782. INT 14 - COURIERS.COM - OUTPUT STATUS
  1783.     AH = 87h
  1784. Return: AX = number of unsent characters
  1785. --------S-1488-------------------------------
  1786. INT 14 - COURIERS.COM - ABORT OUTPUT
  1787.     AH = 88h
  1788. SeeAlso: AH=09h,AH=85h
  1789. --------S-1489-------------------------------
  1790. INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
  1791.     AH = 89h
  1792.     CL = character to send
  1793. SeeAlso: AH=01h,AH=84h
  1794. --------S-148A-------------------------------
  1795. INT 14 - COURIERS.COM - SEND BREAK
  1796.     AH = 8Ah
  1797. SeeAlso: AH=89h,AH=FAh
  1798. --------S-148C-------------------------------
  1799. INT 14 - COURIERS.COM - SET SPEED
  1800.     AH = 8Ch
  1801.     BX = speed in bps
  1802. SeeAlso: AH=00h,AH=82h"COURIERS"
  1803. --------S-148D-------------------------------
  1804. INT 14 - COURIERS.COM - DECONFIGURE PORT
  1805.     AH = 8Dh
  1806. SeeAlso: AH=82h"COURIERS"
  1807. --------S-14A0-------------------------------
  1808. INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT
  1809.     AH = A0h
  1810.     ES:BX -> ASCIZ internet host name
  1811.     CX = length of name
  1812. Return: AH = return code (00h,04h-06h,08h,0Ah-0Ch) (see below)
  1813.     CL = session ID
  1814. Program: the Bridge Application Program Interface is a set of functions which
  1815.       makes many of the details of LAN communications transparent
  1816. Note:    Novell TELAPI.EXE returns AH=09h (not supported) and CL=00h
  1817. SeeAlso: AH=A1h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AX=AF00h
  1818.  
  1819. Values for return code:
  1820.  00h    successful
  1821.  01h    no characters written
  1822.  02h    no characters read
  1823.  03h    no such session
  1824.  04h    clearinghouse name not found
  1825.  05h    no response from host
  1826.  06h    no more sessions available
  1827.  07h    session aborted
  1828.  08h    invalid clearinghouse name
  1829.  09h    not supported
  1830.  0Ah    internal (general) network error
  1831.  0Bh    out of memory
  1832.  0Ch    invalid IP address
  1833. --------S-14A0--CXFFFF-----------------------
  1834. INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT
  1835.     AH = A0h
  1836.     CX = FFFFh
  1837. Return: CF clear if successful
  1838.         AX = 5445h ('TE')
  1839.         CX <> FFFFh
  1840.         DX = port number
  1841.     CF set on error
  1842. Program: TES is a network serial port emulation program
  1843. SeeAlso: AH=A1h"TES"
  1844. --------S-14A1-------------------------------
  1845. INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT
  1846.     AH = A1h
  1847.     DH = session ID (00h for external session managment)
  1848. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1849.     AL destroyed (Novell TELAPI.EXE)
  1850. SeeAlso: AH=A0h"BAPI"
  1851. --------S-14A1-------------------------------
  1852. INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS
  1853.     AH = A1h
  1854. Return: CX = number of active sessions
  1855.     ES:SI -> status array (see below)
  1856. SeeAlso: AH=A2h"TES",AH=A3h"TES"
  1857.  
  1858. Format of status array entry:
  1859. Offset    Size    Description
  1860.  00h    BYTE    status
  1861.  01h    WORD    offset of name
  1862. --------S-14A2-------------------------------
  1863. INT 14 - 3com BAPI SERIAL I/O - WRITE CHARACTER
  1864.     AH = A2h
  1865.     AL = character
  1866.     DH = session ID (00h for external session managment)
  1867. Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1868. SeeAlso: AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
  1869. --------S-14A2-------------------------------
  1870. INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES
  1871.     AH = A2h
  1872. Return: CX = number of servers
  1873.     ES:SI -> array of offsets from ES for server names
  1874. SeeAlso: AH=A1h"TES"
  1875. --------S-14A3-------------------------------
  1876. INT 14 - 3com BAPI SERIAL I/O - READ CHARACTER
  1877.     AH = A3h
  1878.     DH = session ID (00h for external session managment)
  1879. Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1880.     AL = character read or 00h if none available
  1881. SeeAlso: AH=A0h"BAPI",AH=A2h"BAPI",AH=A5h"BAPI",AH=A7h"BAPI"
  1882. --------S-14A3-------------------------------
  1883. INT 14 - Interconnections Inc. TES - START A NEW SESSION
  1884.     AH = A3h
  1885.     ES:SI -> ???
  1886. Return: CF clear if successful
  1887.         AX = 5445h ('TE')
  1888.         CX <> FFFFh
  1889.         DX = port number
  1890.     CF set on error
  1891. SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES"
  1892. --------S-14A4-------------------------------
  1893. INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK
  1894.     AH = A4h
  1895.     CX = length of buffer in bytes
  1896.     DH = session ID (00h for external session managment)
  1897.     ES:BX -> buffer containing data
  1898. Return: AH = return code (00h,01h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1899.     CX = number of bytes actually sent
  1900. SeeAlso: AH=19h,AH=86h,AH=A0"BAPI",AH=A5h"BAPI"
  1901. --------S-14A4-------------------------------
  1902. INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION
  1903.     AH = A4h
  1904.     ???
  1905. Return: ???
  1906. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  1907. --------S-14A5-------------------------------
  1908. INT 14 - 3com BAPI SERIAL I/O - READ BLOCK
  1909.     AH = A5h
  1910.     CX = length of buffer
  1911.     DH = session ID (00h for external session managment)
  1912.     ES:BX -> buffer for data
  1913. Return: AH = return code (00h,02h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1914.     CX = number of bytes actually read
  1915. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A0h"BAPI",AH=A3h"BAPI",AH=A4h"BAPI"
  1916. SeeAlso: AH=A7h"BAPI",AX=FF02h
  1917. --------S-14A5-------------------------------
  1918. INT 14 - Interconnections Inc. TES - RESUME A SESSION
  1919.     AH = A5h
  1920.     AL = session number
  1921. Return: ???
  1922. SeeAlso: AH=A4h"TES",AH=A6h"TES"
  1923. --------S-14A6-------------------------------
  1924. INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK
  1925.     AH = A6h
  1926.     DH = session ID (00h for external session managment)
  1927. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1928. Desc:    generate a short break signal; if data delivery was turned off by the
  1929.       break, wait for the host to turn it on again
  1930. SeeAlso: AH=1Ah,AH=8Ah,AH=FAh,AH=A0h"BAPI"
  1931. --------S-14A6-------------------------------
  1932. INT 14 - Interconnections Inc. TES - DROP A SESSION
  1933.     AH = A6h
  1934.     AL = session number
  1935. Return: AH = status
  1936.         00h successful
  1937.         else error
  1938. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  1939. --------S-14A7-------------------------------
  1940. INT 14 - 3com BAPI SERIAL I/O - READ STATUS
  1941.     AH = A7h
  1942.     DH = session ID (00h for external session managment)
  1943. Return: AH = return code (00h,03h,07h,0Ah,0Bh) (see AH=A0h"BAPI")
  1944.     CX = number of bytes available for reading
  1945. Note:    Novell TELAPI.EXE v4.01 always returns either 0 or 1 bytes available
  1946. SeeAlso: AH=A5h"BAPI"
  1947. --------S-14A7-------------------------------
  1948. INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION
  1949.     AH = A7h
  1950.     ???
  1951. Return: ???
  1952. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  1953. --------S-14A8-------------------------------
  1954. INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER
  1955.     AH = A8h
  1956.     AL = 00h no visible response
  1957.     ES:SI -> ASCIZ command
  1958. Return: ???
  1959. --------N-14A8-------------------------------
  1960. INT 14 - Novell TelAPI v4.01 - CONNECTION INFORMATION???
  1961.     AH = A8h
  1962.     DH = session ID???
  1963.     CH = subfunction
  1964.         02h ???
  1965.         0Dh ???
  1966.         0Fh ???
  1967.         10h ???
  1968.         11h ???
  1969.         28h ???
  1970.         else
  1971.         Return: AH = 09h (not supported)
  1972. Return: AH = return code (see AH=A0h"BAPI")
  1973.         00h successful
  1974.         CL = ??? (0/1/8) (subfunctions 02h,0Dh,0Fh,10h)
  1975.         CL = ??? (7Fh/FFh) (subfunction 28h)
  1976.         CX = ??? (subfunction 11h)
  1977. SeeAlso: AH=A9h"TelAPI"
  1978. --------N-14A9-------------------------------
  1979. INT 14 - Novell TelAPI v4.01 - CONNECTION CONTROL???
  1980.     AH = A9h
  1981.     DH = session ID???
  1982.     CH = subfunction
  1983.         02h ???
  1984.         0Dh ???
  1985.         0Fh ???
  1986.         10h ???
  1987.         11h ???
  1988.         28h ???
  1989.         else
  1990.         Return: AH = 09h (not supported)
  1991.     ???
  1992. Return: AH = return code (see AH=A0h"BAPI")
  1993.     ???
  1994. SeeAlso: AH=A8h"TelAPI",AH=E4h,INT 6B/AX=0600h
  1995. --------S-14AF00BXAAAA-----------------------
  1996. INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK
  1997.     AX = AF00h
  1998.     BX = AAAAh
  1999. Return: AX = AF01h if installed
  2000.         BH = protocol type (if BX=AAAAh on entry)
  2001.         01h NetManage TCP/IP
  2002.         BL = version for protocol type (if BX=AAAAh on entry)
  2003. Note:    early versions of the BAPI and the ROM BIOS simply destroy AX; this
  2004.       behavior is used to determine whether the newer functions (AH=B0h,
  2005.       AH=B1h,etc) are available
  2006. SeeAlso: AH=A0h"BAPI"
  2007. --------S-14B0-------------------------------
  2008. INT 14 - 3com BAPI SERIAL I/O - EN/DISABLE "ENTER COMMAND MODE" (ECM) CHARACTER
  2009.     AH = B0h
  2010.     AL = new state (00h disabled, 01h enabled)
  2011. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  2012. Note:    disabling the ECM character allows applications to send data which
  2013.       includes the ECM character
  2014. SeeAlso: AX=AF00h"BAPI",AH=B1h,AH=B2h
  2015. --------S-14B1-------------------------------
  2016. INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE
  2017.     AH = B1h
  2018. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  2019. Desc:    provide a means for the application or terminal emulator to perform
  2020.       the same action normally caused by the ECM character
  2021. SeeAlso: AH=B0h,AH=B2h
  2022. --------S-14B2-------------------------------
  2023. INT 14 - 3com BAPI SERIAL I/O - GET ECM WATCH STATE
  2024.     AH = B2h
  2025. Return: AH = return code (00h,07h,0Ah) (see AH=A0h"BAPI")
  2026.     AL = watch flag (00h disabled, 01h enabled)
  2027. Desc:    determine whether the ECM character is enabled
  2028. SeeAlso: AH=B0h,AH=B1h
  2029. --------S-14B3-------------------------------
  2030. INT 14 - 3com BAPI SERIAL I/O - GET/SET CONFIGURATION INFO
  2031.     AH = B3h
  2032.     AL = direction (00h get, 01h set)
  2033.     DH = session ID (00h for external session managment)
  2034.     DL = configuration item (00h = end-of-line mapping)
  2035.     CX = new configuration item value (if AL=01h)
  2036.         ---if DL=00h---
  2037.         CH = application EOL type (app to Telnet client)
  2038.         01h application will send lone CR
  2039.         02h application will send CR-? pair
  2040.         CL = driver EOL type (Telnet client to Telnet server)
  2041.         01h driver should send CR-NUL pair
  2042.         02h driver should send CR-LF pair
  2043. Return: AH = return code (00h,03h,09h-0Bh) (see AH=A0h"BAPI")
  2044.     ---if AL=00h---
  2045.     CX = configuration item value (see above)
  2046. SeeAlso: AH=B2h
  2047. --------N-14E0-------------------------------
  2048. INT 14 - TelAPI - ???
  2049.     AH = E0h
  2050.     BX = ???
  2051.     CX:DX = ???
  2052.     DS:DI -> ???
  2053.     ES:SI -> ???
  2054. Return: AX = status (0000h,FF37h,etc.)
  2055.     ES:SI -> ??? if ???
  2056.     ???
  2057. SeeAlso: AH=ECh,AX=FF00h
  2058. --------S-14E000-----------------------------
  2059. INT 14 - MX5 Extended FOSSIL - GET MNP STATUS BLOCK
  2060.     AX = E000h
  2061.     DX = port number (0-3)
  2062. Return: ES:BX -> status block (see below)
  2063. Program: MX5 is a FOSSIL driver by MagicSoft which emulates MNP Level 5, and
  2064.       ships with the MTEZ terminal program as MTEMNP.DRV (a TSR despite
  2065.       the .DRV extension)
  2066. SeeAlso: AX=E006h
  2067.  
  2068. Format of status block:
  2069. Offset    Size    Description
  2070.  00h    BYTE    flag: active (00h no, 01h yes)
  2071.  01h    BYTE    MNP level (2,4,5)
  2072.  02h    BYTE    series ID from remote MNP
  2073.  03h    DWORD    total packets transmitted
  2074.  07h    DWORD    duplicate packets transmitted
  2075.  0Bh    DWORD    maximum speed
  2076.  0Fh    DWORD    total packets received
  2077.  13h    DWORD    duplicate packets received
  2078.  17h    DWORD    maximum speed
  2079. --------S-14E001-----------------------------
  2080. INT 14 - MX5 Extended FOSSIL - GET/SET MNP LEVEL
  2081.     AX = E001h
  2082.     BH = function
  2083.         00h get MNP level
  2084.         01h set MNP level
  2085.         BL = new level (00h none, 02h/04h/05h MNP level N)
  2086.     DX = port number (0-3)
  2087. Return: BL = MNP level
  2088. SeeAlso: AX=E002h,AX=E003h,AX=E004h,AX=E006h
  2089. --------S-14E002-----------------------------
  2090. INT 14 - MX5 Extended FOSSIL - GET/SET MNP ANSWER/ORIGINATE MODE
  2091.     AX = E002h
  2092.     BH = function
  2093.         00h get answer/originate mode
  2094.         01h set mode
  2095.         BL = new mode (00h originate [default], 01h answer)
  2096.     DX = port number (0-3)
  2097. Return: BL = answer/originate mode
  2098. SeeAlso: AX=E001h,AX=E003h,AX=E006h
  2099. --------S-14E003-----------------------------
  2100. INT 14 - MX5 Extended FOSSIL - GET/SET MNP WAIT TICKS
  2101.     AX = E003h
  2102.     BH = function
  2103.         00h get wait ticks
  2104.         01h set wait ticks
  2105.         BL = MNP wait ticks (default 0Eh)
  2106.     DX = port number (0-3)
  2107. Return: BL = wait ticks
  2108. SeeAlso: AX=E001h,AX=E002h,AX=E006h
  2109. --------S-14E004-----------------------------
  2110. INT 14 - MX5 Extended FOSSIL - GET/SET MNP CONNECT SOUND LEVEL
  2111.     AX = E004h
  2112.     BH = function
  2113.         00h get sound level
  2114.         01h set sound level
  2115.         BL = new sound level (00h off, 01h on [default])
  2116.     DX = port number
  2117. Return: BL = sound state
  2118. Desc:    specify whether MX5 should generate beeps after an MNP connection
  2119.       (three high beeps if successful, high then low on connection failure)
  2120. SeeAlso: AX=E002h,AX=E006h
  2121. --------S-14E005-----------------------------
  2122. INT 14 - MX5 Extended FOSSIL - UNINSTALL
  2123.     AX = E005h
  2124. Return: BX = segment of MX5's memory block or 0000h on failure
  2125. Note:    caller must free the returned memory block to complete the uninstall
  2126. SeeAlso: AX=E006h
  2127. --------S-14E006BX0000-----------------------
  2128. INT 14 - MX5 Extended FOSSIL - INSTALLATION CHECK
  2129.     AX = E006h
  2130.     BX = 0000h
  2131. Return: BX = 4D58h ('MX') if installed
  2132.         AH = major version
  2133.         AL = minor version
  2134. SeeAlso: AX=E000h,AX=E001h,AX=E005h,AX=E007h
  2135. --------S-14E007-----------------------------
  2136. INT 14 - MX5 Extended FOSSIL - WAIT SPECIFIED NUMBER OF TICKS
  2137.     AX = E007h
  2138.     CX = number of ticks to wait
  2139. Return: nothing
  2140. SeeAlso: AX=E006h
  2141. --------N-14E1-------------------------------
  2142. INT 14 - TelAPI - ???
  2143.     AH = E1h
  2144.     BX = connection ID
  2145.     ???
  2146. Return: AX = status (0000h,FFF7h,maybe others)
  2147.     ???
  2148. SeeAlso: AH=E6h,AX=FF00h
  2149. --------N-14E2-------------------------------
  2150. INT 14 - TelAPI - BUFFERED READ
  2151.     AH = E2h
  2152.     BX = connection ID
  2153.     CX = length of buffer in bytes
  2154.     ES:SI -> buffer for data
  2155. Return: AX = number of characters actually read??? (negative on error)
  2156. SeeAlso: AH=E6h,AX=FF00h,INT 6B/AH=01h
  2157. --------N-14E3-------------------------------
  2158. INT 14 - TelAPI - BUFFERED WRITE
  2159.     AH = E3h
  2160.     BX = connection ID
  2161.     CX = length of buffer in bytes
  2162.     ES:SI -> buffer containing data
  2163. Return: AX = number of characters actually written??? (negative on error)
  2164. SeeAlso: AH=07h"TelAPI",AH=E6h,AX=FF00h,INT 6B/AH=00h
  2165. --------N-14E4-------------------------------
  2166. INT 14 - TelAPI - CONNECTION CONTROL???
  2167.     AH = E4h
  2168.     BX = connection ID
  2169.     CX = ???
  2170.     ES:SI -> 10-byte buffer containing ???
  2171. Return: ???
  2172. SeeAlso: AH=A9h,AH=E6h,AX=FF00h,INT 6B/AX=0600h
  2173. --------N-14E5-------------------------------
  2174. INT 14 - TelAPI - ???
  2175.     AH = E5h
  2176. Return: AX = status???
  2177. SeeAlso: AH=E6h,AX=FF00h
  2178. --------N-14E6-------------------------------
  2179. INT 14 - TelAPI - ???
  2180.     AH = E6h
  2181. Return: AX = status???
  2182. Notes:    TelAPI also supports the NASI/NACS and NCSI APIs on INT 6B
  2183.     this function invokes AH=E5h internally
  2184. SeeAlso: AX=FF00h,INT 6B/AH=00h,INT 6B/AH=10h
  2185. --------N-14E7-------------------------------
  2186. INT 14 - TelAPI - GET ???
  2187.     AH = E7h
  2188.     ES:SI -> 20-byte buffer for ???
  2189. Return: AX = 0000h (successful)
  2190.     ES:SI buffer filled
  2191. SeeAlso: AX=FF00h
  2192. --------N-14E8-------------------------------
  2193. INT 14 - TelAPI - SET ???
  2194.     AH = E8h
  2195.     BX = connection ID
  2196.     CL = new value for ???
  2197.     DX = ??? (ignored by Novell TELAPI v4.01)
  2198. Return: AX = status (0000h,FFFFh)
  2199. SeeAlso: AX=FF00h
  2200. --------N-14E9-------------------------------
  2201. INT 14 - TelAPI - ???
  2202.     AH = E9h
  2203.     DX = ???
  2204. Return: ???
  2205. SeeAlso: AX=FF00h
  2206. --------N-14EA-------------------------------
  2207. INT 14 - TelAPI - GET CONNECTION INFO???
  2208.     AH = EAh
  2209.     BX = connection ID
  2210.     ES:SI -> buffer for info???
  2211. Return: AX = status (0000h,FFFFh,etc.)
  2212. SeeAlso: AX=FF00h
  2213. --------N-14EB-------------------------------
  2214. INT 14 - TelAPI - GET ???
  2215.     AH = EBh
  2216.     ES:SI -> buffer for ???
  2217. Return: ES:SI buffer filled
  2218. SeeAlso: AX=FF00h
  2219. --------N-14EC-------------------------------
  2220. INT 14 - TelAPI - ???
  2221.     AH = ECh
  2222.     BX = ???
  2223.     CX:DX = ???
  2224.     DS:DI -> ???
  2225.     ES:SI -> ???
  2226. Return: AX = status (0000h,FF37h,etc.)
  2227.     ES:SI -> ??? if ???
  2228.     ???
  2229. Note:    this function is not supported by the Microdyne TelAPI v3.7
  2230. SeeAlso: AH=E0h"TelAPI",AX=FF00h
  2231. --------N-14ED-------------------------------
  2232. INT 14 - TelAPI - ???
  2233.     AH = EDh
  2234.     BX = connection ID
  2235. Return: AX = status (0000h,FFFFh,etc.)
  2236. Note:    this function is not supported by the Microdyne TelAPI v3.7
  2237. SeeAlso: AX=FF00h
  2238. --------a-14F0F0-----------------------------
  2239. INT 14 - ASAP v1.0 - ???
  2240.     AX = F0F0h
  2241.     DX = ???
  2242.     ???
  2243. Return: ???
  2244. Program: ASAP (Automatic Screen Access Program) is a shareware screen reader by
  2245.       MicroTalk
  2246. SeeAlso: AX=F0F1h
  2247. --------a-14F0F1DX0000-----------------------
  2248. INT 14 - ASAP v1.0 - INSTALLATION CHECK
  2249.     AX = F0F1h
  2250.     DX = 0000h
  2251. Return: DX = segment of resident code
  2252.        = 0000h if not installed
  2253. Program: ASAP (Automatic Screen Access Program) is a shareware screen reader by
  2254.       MicroTalk
  2255. SeeAlso: AX=F0F0h,INT 10/AX=3800h
  2256. --------S-14F4FF-----------------------------
  2257. INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK
  2258.     AX = F4FFh
  2259.     DX = port (00h-03h)
  2260. Return: CF clear if present
  2261.         AX = 0000h
  2262.     CF set if not present
  2263.         AX <> 0000h
  2264. --------S-14F9-------------------------------
  2265. INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL
  2266.     AH = F9h
  2267.     DX = port (00h-03h)
  2268. --------S-14FA-------------------------------
  2269. INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK
  2270.     AH = FAh
  2271.     DX = port (00h-03h)
  2272. SeeAlso: AH=1Ah,AH=8Ah
  2273. --------S-14FB-------------------------------
  2274. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS
  2275.     AH = FBh
  2276.     AL = modem control register (see AH=05h)
  2277.     DX = port (00h-03h)
  2278. SeeAlso: AH=05h"SERIAL"
  2279. --------S-14FC-------------------------------
  2280. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT
  2281.     AH = FCh
  2282.     DX = port (00h-03h)
  2283. Return: AH = RS232 status bits (see AH=00h)
  2284.     AL = character
  2285. SeeAlso: AH=02h,AH=0Ch,AX=FF02h
  2286. --------S-14FD02-----------------------------
  2287. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS
  2288.     AX = FD02h
  2289. Return: CX = number of characters available
  2290. --------N-14FF00-----------------------------
  2291. INT 14 - TelAPI - INSTALLATION CHECK
  2292.     AX = FF00h
  2293. Return: AL = FFh if installed
  2294.     AH = 00h for Novell TELAPI.EXE
  2295. SeeAlso: AH=E6h
  2296. --------S-14FF02-----------------------------
  2297. INT 14 - IBM/Yale EBIOS SERIAL I/O - BUFFERED READ
  2298.     AX = FF02h
  2299.     CX = length
  2300.     DX = port (00h-03h)
  2301.     ES:BX -> buffer
  2302. Return: CX = number of characters read
  2303. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh
  2304. --------t-15---------------------------------
  2305. INT 15 - Microsoft TSR Specification
  2306.     No additional information available at this time.
  2307. --------B-1500-------------------------------
  2308. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  2309.     AH = 00h
  2310. Return: CF set on error
  2311.         AH = 86h no cassette present
  2312.     CF clear if successful
  2313. SeeAlso: AH=01h"CASSETTE"
  2314. --------M-1500-------------------------------
  2315. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  2316.     AH = 00h
  2317. Return: CX = signed X count
  2318.     DX = signed Y count
  2319. --------O-1500-------------------------------
  2320. INT 15 - VMiX v2+ - INSTALLATION CHECK
  2321.     AH = 00h
  2322. Return: DX = 0798h if installed
  2323.         AX = version (AH = major, AL = minor)
  2324. --------T-1500-------------------------------
  2325. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  2326.     AH = 00h
  2327. Note:    if issued by the highest-priority task while MultiDOS is using
  2328.       priority-based rather than round-robin scheduling, control will be
  2329.       returned to the caller immediately
  2330. SeeAlso: AH=03h"MultiDOS",AX=1000h
  2331. --------B-1501-------------------------------
  2332. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  2333.     AH = 01h
  2334. Return: CF set on error
  2335.         AH = 86h no cassette present
  2336.     CF clear if successful
  2337. SeeAlso: AH=00h"CASSETTE"
  2338. --------b-1501-------------------------------
  2339. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  2340.     AH = 01h
  2341.     AL = NVRAM location (00h to 3Fh)
  2342.     BL = NVRAM data value
  2343. Return: AH = return code
  2344.         00h OK
  2345.         01h address bad
  2346.         02h write error
  2347. SeeAlso: AH=02h"Amstrad"
  2348.  
  2349. Format of NVRAM:
  2350. Offset    Size    Description
  2351.  00h    BYTE    time of day: seconds
  2352.  01h    BYTE    alarm time: seconds
  2353.  02h    BYTE    time of day: minutes
  2354.  03h    BYTE    alarm time: minutes
  2355.  04h    BYTE    time of day: hours
  2356.  05h    BYTE    alarm time: hours
  2357.  06h    BYTE    day of week, 1 = Sunday
  2358.  07h    BYTE    day of month
  2359.  08h    BYTE    month
  2360.  09h    BYTE    year mod 100
  2361.  0Ah    BYTE    RTC status register A
  2362.         bit 7: set if date/time being updated
  2363.         bits 6-4: time base speed, default 010 = 32768 Hz
  2364.         bits 3-0: interrupt rate selection, default 0110 = 1024 Hz
  2365.  0Bh    BYTE    RTC status register B (see below)
  2366.  0Ch    BYTE    RTC status register C (read-only)
  2367.         bit 7: IRQF flag
  2368.         bit 6: PF flag
  2369.         bit 5: AF flag
  2370.         bit 4: UF flag
  2371.  0Dh    BYTE    RTC status register D
  2372.         bit 7: battery good
  2373.  0Eh  6 BYTEs    time and date machine last used
  2374.  14h    BYTE    user RAM checksum
  2375.  15h    WORD    Enter key scancode/ASCII code
  2376.  17h    WORD    Forward delete key scancode/ASCII code
  2377.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  2378.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  2379.  1Dh    WORD    mouse button 1 scancode/ASCII code
  2380.  1Fh    WORD    mouse button 2 scancode/ASCII code
  2381.  21h    BYTE    mouse X scaling factor
  2382.  22h    BYTE    mouse Y scaling factor
  2383.  23h    BYTE    initial VDU mode and drive count
  2384.  24h    BYTE    initial VDU character attribute
  2385.  25h    BYTE    size of RAM disk in 2K blocks
  2386.  26h    BYTE    initial system UART setup byte
  2387.  27h    BYTE    initial external UART setup byte
  2388.  28h 24 BYTEs    available for user application
  2389. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  2390.       the clock chip
  2391.  
  2392. Bitfields for RTC status register B:
  2393.  bit 7    clear if normal update, set if abort update
  2394.  bit 6    periodic interrupt enable
  2395.  bit 5    alarm interrupt enable
  2396.  bit 4    update end interrupt enable
  2397.  bit 3    square wave enable
  2398.  bit 2    date mode (clear = BCD, set = binary)
  2399.  bit 1    24-hour format
  2400.  bit 0    daylight saving time enable
  2401. --------O-1501-------------------------------
  2402. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  2403.     AH = 01h
  2404.     STACK:    WORD    object ID of requestor
  2405.         DWORD    pointer to ASCIZ name of requested method
  2406.             "assign" assign channel to object
  2407.             "deassign" deassign channel
  2408.             "cursor" set cursor on/off
  2409.             "init" initialize comm port
  2410.             "open" open I/O channel
  2411.             "position" set cursor position
  2412.             "receive" get buffered packet from comm port
  2413.             "send" send buffered packet to comm port
  2414.             "vio" set current virtual I/O to specified channel
  2415.             "window" make window at cursor position
  2416.         ---if "assign"---
  2417.          WORD    object UID
  2418.          WORD    caller UID/PID
  2419.          DWORD    CSL with port
  2420.         ---if "deassign"---
  2421.          WORD    channel ID
  2422.         ---if "cursor"---
  2423.          WORD    channel ID (must be a SRCSINK)
  2424.          WORD    new state (0000h off, 0001h on)
  2425.         ---if "init"---
  2426.          WORD    channel ID (must be a SRCSINK)
  2427.          WORD    comm port number (00h-03h)
  2428.          WORD    UART init code
  2429.         ---if "open"---
  2430.          WORD    channel ID
  2431.         ---if "position"---
  2432.          WORD    channel ID (must be a SRCSINK)
  2433.          WORD    position (high byte = row, low byte = column)
  2434.         ---if "receive"---
  2435.          DWORD    pointer to buffer
  2436.         ---if "send"---
  2437.          WORD    length of buffer
  2438.          DWORD    pointer to buffer
  2439.         ---if "vio"---
  2440.          WORD    channel ID (must be a SRCSINK)
  2441.         ---if "window"---
  2442.          WORD    top left (high byte = row, low byte = column)
  2443.          WORD    bottom right (high byte = row, low byte = column)
  2444. Return: DX:AX -> IRP structure or 0000h:0000h
  2445. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  2446. --------T-1501-------------------------------
  2447. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  2448.     AH = 01h
  2449.     AL = semaphore number (00h-3Fh)
  2450. Return: AH = status
  2451.         00h successful
  2452.         02h invalid semaphore number
  2453. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  2454.       task and the call returns immediately
  2455.     if the semaphore is already owned by another task, the calling task
  2456.       is placed on a queue for the semaphore and suspended until it can
  2457.       become owner of the semaphore
  2458.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  2459. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  2460. --------B-1502-------------------------------
  2461. INT 15 - CASSETTE - READ DATA (PC and PCjr only)
  2462.     AH = 02h
  2463.     CX = number of bytes to read
  2464.     ES:BX -> buffer
  2465. Return: CF clear if successful
  2466.         DX = number of bytes read
  2467.         ES:BX -> byte following last byte read
  2468.     CF set on error
  2469.     AH = status (see below)
  2470. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  2471.  
  2472. Values for status:
  2473.  00h    successful
  2474.  01h    CRC error
  2475.  02h    bad tape signals
  2476.  04h    no data
  2477.  80h    invalid command
  2478.  86h    no cassette present
  2479. --------b-1502-------------------------------
  2480. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  2481.     AH = 02h
  2482.     AL = NVRAM location (00h to 3Fh)
  2483. Return: AH = return code
  2484.         00h OK
  2485.         01h address bad
  2486.         02h checksum error
  2487.     AL = NVRAM data value
  2488. SeeAlso: AH=01h"Amstrad"
  2489. --------O-1502-------------------------------
  2490. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  2491.     AH = 02h
  2492.     STACK:    WORD    object ID of requestor
  2493.         DWORD    pointer to ASCIZ name of requested method
  2494.             "assign" allocate low memory block
  2495.             "assign extended" allocate extended memory pages
  2496.             "assign gdt" allocate GDT selector
  2497.             "paged" allocate low paged memory
  2498.             "paged extended" alllocate extended memory pages
  2499.             "deassign" free memory block
  2500.             "deassign gdt" free GDT selector
  2501.             "getvpage" get physical address for virtual page
  2502.             "setvpage" set physical address for virtual page
  2503.             "info" get VMiX memory usage info block
  2504.             "move" move contents of 32-bit memory
  2505.             "newmcb" make new DOS memory control block
  2506.             "owner" get process ID of MCB or PSP owner
  2507.             "umb" allocate upper memory block
  2508.             "video" toggle system use of vidoe memory and get stat
  2509.         ---if "assign"---
  2510.          WORD    number of objects
  2511.          WORD    size in bytes (multiple of 512 bytes)
  2512.         ---if "assign extended"---
  2513.          WORD    number of objects
  2514.          WORD    size in bytes (multiple of 4K)
  2515.         ---if "assign gdt"---
  2516.          WORD    access type (low byte)
  2517.          WORD    segment size in paragraphs
  2518.          DWORD    pointer to start of physical segment
  2519.         ---if "paged"---
  2520.          WORD    number of 512-byte pages
  2521.         ---if "paged extended"
  2522.          WORD    number of 4K pages
  2523.         ---if "deassign"---
  2524.          DWORD    pointer returned by previous allocation call
  2525.         ---if "deassign gdt"---
  2526.          WORD    GDT selector
  2527.         ---if "getvpage"---
  2528.          WORD    owner's process ID
  2529.          DWORD    pointer to buffer for page structure (struct VPGE)
  2530.         ---if "setvpage"---
  2531.          WORD    owner's process ID
  2532.          DWORD    pointer to new page structure (struct VPGE)
  2533.         ---if "info"---
  2534.          no additional arguments
  2535.         ---if "move"
  2536.          DWORD    32-bit source address
  2537.          DWORD    32-bit destination address
  2538.          WORD    number of words to move
  2539.         ---if "newmcb"---
  2540.          DWORD    pointer to new MCB's location
  2541.          WORD    size of memory block
  2542.          DWORD    pointer to ASCIZ name string (max 8 chars)
  2543.         ---if "owner"---
  2544.          WORD    MCB or PSP segment
  2545.         ---if "umb"---
  2546.          WORD    size in paragraphs
  2547.         ---if "video"---
  2548.          no additional arguments
  2549. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  2550. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  2551. --------T-1502-------------------------------
  2552. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  2553.     AH = 02h
  2554.     AL = semaphore number (00h-3Fh)
  2555. Return: AH = status
  2556.         00h successful
  2557.         01h not semaphore owner
  2558.         02h invalid semaphore number
  2559. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  2560.       queue will become the new owner and be reawakened
  2561.     do not use within an interrupt handler
  2562. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  2563. --------B-1503-------------------------------
  2564. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  2565.     AH = 03h
  2566.     CX = number of bytes to write
  2567.     ES:BX -> data buffer
  2568. Return: CF clear if successful
  2569.         ES:BX -> byte following last byte written
  2570.     CF set on error
  2571.     AH = status (see AH=02h"CASSETTE")
  2572.     CX = 0000h
  2573. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  2574. --------V-1503-------------------------------
  2575. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  2576.     AH = 03h
  2577.     AL = value (I,R,G,B bits)
  2578. SeeAlso: AH=04h"Amstrad"
  2579. --------O-1503-------------------------------
  2580. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  2581.     AH = 03h
  2582.     STACK:    DWORD    pointer to ASCII prompt
  2583.         WORD    field outline character
  2584.         WORD    length of input field (max 7Fh)
  2585.         DWORD    address of pointer to input buffer
  2586. Return: AX = length of input (input buffer is padded with blanks)
  2587. SeeAlso: AH=04h"VMiX"
  2588. --------T-1503-------------------------------
  2589. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  2590.     AH = 03h
  2591.     DX = number of time slices to remain suspended
  2592. Return: after specified interval has elapsed
  2593. Note:    when priority-based scheduling is in use, high-priority tasks should
  2594.       use this function to yield the processor
  2595. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  2596. --------B-1504-------------------------------
  2597. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  2598.     AH = 04h
  2599.     ES:DI -> results buffer length 20h for System Parameter Table
  2600.     DS = segment containing ABIOS RAM extensions (zero if none)
  2601. Return: AH = 00h success: results at ES:DI
  2602.     CF set on failure
  2603. SeeAlso: AH=05h"ABIOS",C1h
  2604.  
  2605. Format of ABIOS System Parameter Table:
  2606. Offset    Size    Description
  2607.  00h    DWORD    FAR address of ABIOS Common Start Routine
  2608.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  2609.  08h    DWORD    FAR address of ABIOS Time-out Routine
  2610.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  2611.  0Eh 16 BYTEs    reserved
  2612.  1Eh    WORD    number of entries in initialization table
  2613. --------V-1504-------------------------------
  2614. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  2615.     AH = 04h
  2616.     AL = value (RDSEL1 and RDSEL0)
  2617. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  2618. --------O-1504-------------------------------
  2619. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  2620.     AH = 04h
  2621.     STACK:    DWORD    control string
  2622.         DWORD    array of arguments
  2623. SeeAlso: AH=03h"VMiX"
  2624. --------T-1504-------------------------------
  2625. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  2626.     AH = 04h
  2627.     AL = mailbox number (00h-3Fh)
  2628.     CX = message length in bytes
  2629.     DS:SI -> message
  2630. Return: AH = status
  2631.         00h successful
  2632.         01h out of message memory
  2633.         02h invalid mailbox number
  2634. Note:    the message is copied into a system buffer; the caller may immediately
  2635.       reuse its buffer
  2636. SeeAlso: AH=05h"MultiDOS"
  2637. --------B-1505-------------------------------
  2638. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  2639.     AH = 05h
  2640.     ES:DI -> results buffer length (18h * Number_of_Entries)
  2641.     DS = segment containing ABIOS RAM extensions (zero if none)
  2642. Return: AH = 00h success: results at ES:DI
  2643.     CF set on failure
  2644. SeeAlso: AH=04h"ABIOS",C1h
  2645.  
  2646. Format of one entry of ABIOS Initialization Table:
  2647. Offset    Size    Description
  2648.  00h    WORD    device ID
  2649.  02h    WORD    number of Logical IDs
  2650.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  2651.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  2652.  0Ah    WORD    request block length
  2653.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  2654.  0Eh    WORD    Data Pointers length (in Common Data Area)
  2655.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  2656.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  2657.  12h  6 BYTEs    reserved
  2658. --------V-1505-------------------------------
  2659. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  2660.     AH = 05h
  2661.     AL = value (I,R,G,B bits)
  2662. SeeAlso: AH=04h"Amstrad"
  2663. --------O-1505-------------------------------
  2664. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  2665.     AH = 05h
  2666. Return: AX = process ID
  2667. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  2668. --------T-1505-------------------------------
  2669. INT 15 - MultiDOS Plus - CHECK MAILBOX
  2670.     AH = 05h
  2671.     AL = mailbox number (00h-3Fh)
  2672. Return: AH = status
  2673.         00h successful
  2674.         DX = length of first message in queue, 0000h if no message
  2675.         02h invalid mailbox number
  2676. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  2677. --------b-1506-------------------------------
  2678. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  2679.     AH = 06h
  2680. Return: BX = version number
  2681. --------O-1506-------------------------------
  2682. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  2683.     AH = 06h
  2684.     STACK:    WORD    process ID
  2685. Return: DX:AX -> process control block
  2686. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  2687. --------T-1506-------------------------------
  2688. INT 15 - MultiDOS Plus - READ MAILBOX
  2689.     AH = 06h
  2690.     AL = mailbox number (00h-3Fh)
  2691.     CX = size of buffer in bytes
  2692.     ES:DI -> buffer for message
  2693. Return: AH = status
  2694.         00h successful
  2695.         CX = number of bytes copied
  2696.         DX = actual length of message
  2697.         02h invalid mailbox number
  2698. Note:    if the caller's buffer is not large enough, the message is truncated
  2699.       and the remainder is lost
  2700. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  2701. --------O-1507-------------------------------
  2702. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  2703.     AH = 07h
  2704.     STACK:    WORD    object type
  2705. Return: DX:AX -> object control block
  2706. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  2707. --------T-1507-------------------------------
  2708. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  2709.     AH = 07h
  2710.     BX:CX = entry point of new task
  2711.     DX = stack size in paragraphs
  2712. Return: AH = status
  2713.         00h successful
  2714.         01h no free task control blocks
  2715.         02h no free memory for task's stack
  2716. Note:    execution returns immediately to calling task
  2717. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  2718. --------O-1508-------------------------------
  2719. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  2720.     AH = 08h
  2721.     STACK:    WORD    channel ID
  2722. Return: DX:AX -> channel control block
  2723. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  2724. --------T-1508-------------------------------
  2725. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  2726.     AH = 08h
  2727. Return: calling task terminated, so execution never returns to caller
  2728. Notes:    an internal task must be terminated with this function rather than a
  2729.       DOS termination function
  2730.     task's stack space is returned to parent task's memory pool
  2731. SeeAlso: AH=07h"MultiDOS"
  2732. --------O-1509-------------------------------
  2733. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  2734.     AH = 09h
  2735.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  2736.         WORD    subqueue ID
  2737. Return: AX = queue ID
  2738. SeeAlso: AH=0Ah"VMiX"
  2739. --------T-1509-------------------------------
  2740. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  2741.     AH = 09h
  2742.     AL = new priority
  2743. Note:    the priority has different meanings depending on whether priority-
  2744.       based or round-robin scheduling is used
  2745. SeeAlso: AH=07h"MultiDOS"
  2746. --------O-150A-------------------------------
  2747. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  2748.     AH = 0Ah
  2749.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  2750.         WORD    ID of current element in queue chain
  2751. Return: AX = ID of next element
  2752. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  2753. --------T-150A-------------------------------
  2754. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  2755.     AH = 0Ah
  2756.     AL = new interval
  2757.         00h = 55.0 ms (default)
  2758.         80h = 27.5 ms
  2759.         40h = 13.75 ms
  2760.         20h = 6.88 ms
  2761.         10h = 3.44 ms
  2762.         08h = 1.72 ms
  2763. SeeAlso: AH=03h"MultiDOS"
  2764. --------O-150B-------------------------------
  2765. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  2766.     AH = 0Bh
  2767.     STACK:    WORD    caller's UID
  2768.         DWORD    pointer to ASCIZ name of requested method
  2769.             "abort" abort current send/receive on comm port
  2770.             "block" start/end critical section
  2771.             "close" terminate interrupt-drive comm I/O
  2772.             "open" prepare comm port for interrupt-driven I/O
  2773.             "delay" set delay timer and wait
  2774.             "hibernate" put process to sleep
  2775.             "ints" enable/disable interrupt-driven INT 14h
  2776.             "length" get current send/receive buffer offsets
  2777.             "kswitch" switch stacks
  2778.             "numproc" get number of active processes
  2779.             "protocol" set protocol function for comm interrupts
  2780.             "relocate" set/reset VMiX flag for relocating to himem
  2781.             "status" get current open comm port status
  2782.             "wake" awaken a process
  2783.             "xport" get comm port polled for logins
  2784.         ---if "abort"---
  2785.          no additional arguments
  2786.         ---if "block"---
  2787.          WORD    0000h end, 0001h start
  2788.         ---if "close"---
  2789.          no additional arguments
  2790.         ---if "open"---
  2791.          WORD    comm port (00h-03h)
  2792.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  2793.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  2794.         ---if "delay"---
  2795.          WORD    time in seconds
  2796.         ---if "hibernate"---
  2797.          WORD    process ID
  2798.         ---if "ints"---
  2799.          WORD    0000h if no, 0001h if yes
  2800.         ---if "length","numproc","relocate","status","xport"---
  2801.          no additional arguments
  2802.         ---if "kswitch"---
  2803.          DWORD    pointer to new stack
  2804.         ---if "protocol"---
  2805.          DWORD    pointer to function (must be in low "assign"ed memory
  2806.             when in 386 mode)
  2807.         ---if "wake"---
  2808.          WORD    process ID
  2809. Return: DX:AX -> result or 0000h:0000h
  2810.         ---if "length"---
  2811.          BYTE    receive offset
  2812.          BYTE    send offset
  2813.         ---if "kswitch"---
  2814.          DWORD    old stack pointer
  2815.         ---if "numproc"---
  2816.          WORD    number of active processes
  2817.         ---if "status"---
  2818.          current open comm port status
  2819.         ---if "xport"---
  2820.          current comm port being polled for logins
  2821. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  2822. --------T-150B-------------------------------
  2823. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  2824.     AH = 0Bh
  2825. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  2826.       may be restored with AH=0Ch
  2827.     caller's video mode must be same as foreground task's video mode
  2828.     any text written while in the background will be saved to the
  2829.       foreground task's virtual screen when it switches to the background
  2830.     useful if a background task wants to display a message on the
  2831.       foreground screen
  2832. SeeAlso: AH=0Ch"MultiDOS"
  2833. --------O-150C-------------------------------
  2834. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  2835.     AH = 0Ch
  2836.     STACK:    WORD    process ID
  2837. Return: DX:AX -> TSS stack store
  2838. SeeAlso: AH=00"VMiX"
  2839. --------T-150C-------------------------------
  2840. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  2841.     AH = 0Ch
  2842. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  2843.       unless AH=0Bh has been called first
  2844. SeeAlso: AH=0Bh"MultiDOS"
  2845. --------O-150D-------------------------------
  2846. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  2847.     AH = 0Dh
  2848.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  2849.             followed by standard VMiX shell command string
  2850. Return: AX = process ID or error code "SYS_ERROR"
  2851. Note:    the maximum string length is 7Fh characters
  2852. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  2853. --------T-150D-------------------------------
  2854. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  2855.     AH = 0Dh
  2856. Note:    calling task receives all time slices until AH=0Eh is called; this
  2857.       allows time-critical events or nonreentrant code to be processed
  2858. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  2859. --------O-150E-------------------------------
  2860. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  2861.     AH = 0Eh
  2862.     STACK:    WORD    process ID
  2863. Return: AX = status (SYS_OK or SYS_ERROR)
  2864. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  2865. --------T-150E-------------------------------
  2866. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  2867.     AH = 0Eh
  2868. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  2869. --------d-150F-------------------------------
  2870. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  2871.     AH = 0Fh
  2872.     AL = phase code
  2873.         00h reserved
  2874.         01h surface analysis
  2875.         02h formatting
  2876. Return: CF clear if formatting should continue, set if it should terminate
  2877. Note:    called during ESDI drive formatting after each cylinder is completed
  2878. SeeAlso: INT 13/AH=1Ah
  2879. --------O-150F-------------------------------
  2880. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  2881.     AH = 0Fh
  2882.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  2883.         WORD    ID of element in queue chain
  2884. Return: AX = key
  2885. SeeAlso: AH=0Ah"VMiX"
  2886. --------T-150F-------------------------------
  2887. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  2888.     AH = 0Fh
  2889.     DS:BX -> ASCIZ command
  2890. Return: after command has been processed
  2891. Notes:    specified string is executed as if it had been typed at the MultiDOS
  2892.       command prompt
  2893.     the task is placed on a queue which MultiDOS examines periodically and
  2894.       is suspended until MultiDOS has processed the command
  2895.     all lowercase characters up to the first blank are converted to upper
  2896.       case within the given buffer
  2897. --------O-1510-------------------------------
  2898. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  2899.     AH = 10h
  2900.     STACK:    DWORD    pointer to function
  2901.           N WORDs    function args
  2902. Return: AX = function's return value??? (not specified in documentation)
  2903. Note:    while the function is executing, the following global descriptors are
  2904.       available:
  2905.         20h stack segment
  2906.         38h code segment of function
  2907.         40h data alias for function's code segment
  2908.       additional GDT descriptors can be allocated using AH=02h with
  2909.       function "assign gdt"
  2910. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  2911. --------T-1510-------------------------------
  2912. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  2913.     AH = 10h
  2914.     AL = semaphore number (00h-3Fh)
  2915. Return: AH = status
  2916.         00h semaphore not in use
  2917.         01h semaphore owned by another task
  2918.         02h invalid semaphore number
  2919.         03h semaphore owned by caller
  2920. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  2921. --------Q-151000-----------------------------
  2922. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  2923.     AX = 1000h
  2924. Return: after other processes run
  2925. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  2926.       the current time-slice is set to expire at the next clock tick rather
  2927.       than immediately
  2928. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  2929. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  2930. SeeAlso: INT 7F/AH=E8h
  2931. --------Q-151001-----------------------------
  2932. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  2933.     AX = 1001h
  2934.     BX = number of bytes to allocate
  2935. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  2936.     AX = status (DV v2.42)
  2937.         0000h successful
  2938.         0001h failed
  2939. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  2940.       common memory.  Under DV v2.42, this call never generates a user
  2941.       prompt regardless of the SETERROR value; instead, it always returns
  2942.       AX=0001h and ES:DI=0000h:0000h if out of memory
  2943. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  2944. --------Q-151002-----------------------------
  2945. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  2946.     AX = 1002h
  2947.     ES:DI -> previously allocated block
  2948. Return: block freed
  2949. SeeAlso: AX=1001h,AX=DE0Dh
  2950. --------Q-151003-----------------------------
  2951. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  2952.     AX = 1003h
  2953.     BH = attribute
  2954.     BL = character
  2955.     DX = segment of object handle for window
  2956. Note:    BX=0 does not display anything, it only positions the hardware cursor
  2957. --------Q-1510-------------------------------
  2958. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  2959.     AH = 10h
  2960.     AL = 04h thru 12h
  2961. Return: pops up "Programming error" window in DV 2.x
  2962. --------Q-151013-----------------------------
  2963. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  2964.     AX = 1013h
  2965.     ES:DI -> FAR service routine
  2966. Return: BX = bit mask indicating which bit was allocated
  2967.          0000h if no more bits available
  2968. SeeAlso: AX=1014h,AX=1015h
  2969. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  2970.       interrupt; if other calls need to be made, the interrupt handler
  2971.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  2972. --------Q-151014-----------------------------
  2973. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  2974.     AX = 1014h
  2975.     BX = bit mask from INT 15/AX=1013h
  2976. SeeAlso: AX=1013h,AX=1015h
  2977. --------Q-151015-----------------------------
  2978. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  2979.     AX = 1015h
  2980.     BX = bit mask for interrupts to post
  2981. Return: indicated routines will be called: (DV 2.0x) at next task switch
  2982.                        (DV 2.2x) immediately on return from
  2983.                              hardware interrupt
  2984. SeeAlso: AX=1013h,AX=1014h
  2985. Notes:    this is one of the few TopView calls which are allowed from a hardware
  2986.       interrupt handler
  2987.     the handler will be called with ES containing the segment of the handle
  2988.       of the next task to be executed; on return, ES must be the segment of
  2989.       a task handle
  2990. --------Q-151016-----------------------------
  2991. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  2992.     AX = 1016h
  2993.     ES:DI = possible object handle
  2994. Return: BX = FFFFh if ES:DI is a valid object handle
  2995.          0000h if ES:DI is not
  2996. Note:    under DESQview versions prior to 2.50, an object handle is always a
  2997.       pointer to the object; for versions 2.50 and up, only task handles
  2998.       are always pointers (other handles may consist of a unique object
  2999.       number and offset into DESQview's common memory)
  3000. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  3001.  
  3002. Format of object:
  3003. Offset    Size    Description
  3004.  00h    WORD    offset in common memory of previous object of same type
  3005.  02h    WORD    offset in common memory of next object of same type
  3006.  04h    WORD    signature FEDCh (DV 2.42-)
  3007.         signature FEDCh or object number (DV 2.50+)
  3008.  06h    WORD    object type
  3009.         00h window/task
  3010.         01h mailbox
  3011.         02h keyboard
  3012.         03h timer
  3013.         04h pointer
  3014.         05h panel
  3015.         06h objectq
  3016.  08h    DWORD    object handle to return to caller
  3017.  0Ch    DWORD    canonicalized object address (segment = common memory)
  3018.  10h    WORD    offset in common memory of owning task
  3019.         (0000h for unowned OBJECTQs)
  3020.  12h    WORD    mapping context
  3021.         offset in common memory of mapping context record (see below)
  3022.     remainder varies by object type and DESQview version
  3023. ---v2.42 keyboard object---
  3024.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  3025.         bit 15: keyboard opened
  3026.  16h  4 BYTEs    ???
  3027.  1Ah    WORD    priority in OBJECTQ???
  3028.  1Ch    ...
  3029.  25h    WORD    offset in common memory of ??? task
  3030.  27h  4 BYTEs    ???
  3031. ---v2.42 objectq object---
  3032.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  3033.         bit 15: OBJECTQ opened
  3034.  16h  2 BYTEs    ???
  3035.  18h    WORD    offset in common memory of ??? task
  3036.  1Ah  6 BYTEs    ???
  3037. ---v2.42 mailbox object---
  3038.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  3039.         bit 15: mailbox opened
  3040.  1Ah    WORD    priority in OBJECTQ???
  3041.  1Ch  6 BYTEs    ???
  3042.  22h    WORD    offset in common memory of mailbox name (counted string)
  3043.         0000h if no name
  3044.      <= 5 BYTEs ???
  3045. ---v2.22-2.42,2.52,2.60 window/task object---
  3046.  14h    BYTE    00h window, 01h task
  3047.  15h    BYTE    internal (not Switch menu) window number???
  3048.  16h    BYTE    internal (not Switch menu) window number???
  3049.  17h    WORD    segment of internal window record (see below)
  3050.  19h  2 BYTEs    ???
  3051.  1Bh    BYTE    cursor row
  3052.  1Ch    BYTE    cursor column
  3053.  1Dh    BYTE    visible window origin, row
  3054.  1Eh    BYTE    visible window origin, column
  3055.  1Fh    BYTE    window height (logical)
  3056.  20h    BYTE    window width (logical)
  3057.  21h    BYTE    window position, row
  3058.  22h    BYTE    window position, column
  3059.  23h    BYTE    window height (visible)
  3060.  24h    BYTE    window width (visible)
  3061.  25h    BYTE    row of top of frame (or window if unframed)
  3062.  26h    BYTE    column of left of frame (or window if unframed)
  3063.  27h    BYTE    window height (physical, including frame)
  3064.  28h    BYTE    window width (physical, including frame)
  3065.  29h    BYTE    unzoomed visible origin, row (00h before first zoom)
  3066.  2Ah    BYTE    unzoomed visible origin, column (00h before first zoom)
  3067.  2Bh    BYTE    unzoomed window position, row (00h before first zoom)
  3068.  2Ch    BYTE    unzoomed window position, column (00h before first zoom)
  3069.  2Dh    BYTE    unzoomed window height (00h before first zoom)
  3070.  2Eh    BYTE    unzoomed window width (00h before first zoom)
  3071.         unzoomed parameters above are updated when window is zoomed
  3072.         to full    screen
  3073.  2Fh    BYTE    ??? initially logical window height
  3074.  30h    BYTE    ??? initially logical window width
  3075.  31h  2 BYTEs    ???
  3076.  33h    BYTE    minimum height of window
  3077.  34h    BYTE    minimum width of window
  3078.  35h    BYTE    maximum height of window
  3079.  36h    BYTE    maximum width of window
  3080.  37h  3 BYTEs    ???
  3081.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  3082.  42h 24 BYTEs    attributes???
  3083.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  3084.  62h  3 BYTEs    ???
  3085.  65h    BYTE    ??? bitflags
  3086.  66h    BYTE    bit 0: window is zoomed
  3087.  67h    BYTE    ???
  3088.  68h    WORD    offset in common memory of window name or 0000h if untitled
  3089.  6Ah    WORD    length of window name
  3090.  6Ch  2 BYTEs    ???
  3091.  6Eh    WORD    offset of logical cursor in window (in character cells)
  3092.  70h    DWORD    pointer to field table for window
  3093.  74h    BYTE    ???
  3094.  75h  2 BYTEs    ???
  3095.  77h    BYTE    number of last-visited field
  3096.  78h    DWORD    pointer to field table entry for last-visited field
  3097.  7Ch  3 BYTEs    ???
  3098.  7Fh    BYTE    select field marker character
  3099.  80h    BYTE    ??? bit flags
  3100.         bit 0: allow ECh window stream opcode to change reverse logattr
  3101.         bit 1: alternate field processing mode selected
  3102.  81h    BYTE    ???
  3103.  82h    DWORD    notification function (manager stream opcode 8Ah)
  3104.         no notification if segment = 0000h
  3105.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  3106.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  3107.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  3108.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  3109.  90h    BYTE    ??? bitflags
  3110.  91h    BYTE    ???
  3111.  ---task object only
  3112.  92h    BYTE    bit flags (bits 0-4)
  3113.  93h    BYTE    character for ??? (default 20h)
  3114.  94h    BYTE    ??? flag
  3115.  95h    WORD    offset in common memory of ???
  3116.  97h  2 BYTEs    ???
  3117.  99h    WORD    ???
  3118.  9Bh    BYTE    ??? bit flags
  3119.         bit 3: ???
  3120.         bit 6: perform protected-attribute processing on select fields
  3121.  9Ch    BYTE    ???
  3122.  9Dh    WORD    offset in common memory of current register save record
  3123.         (see below).  No register save record in use if < 01C0h
  3124.  9Fh    WORD    offset in common memory of task's keyboard object
  3125.  A1h    WORD    offset in common memory of task's OBJECTQ object
  3126.  A3h    WORD    offset in common memory of task's mailbox object
  3127.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  3128.  A7h    DWORD    user's SS:SP
  3129.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  3130.  ADh  6 BYTEs    ???
  3131.  B3h    BYTE    ??? bit flags
  3132.         bit 0: run in foreground only
  3133.  B4h    BYTE    ???
  3134.  B5h    BYTE    ??? bitflags
  3135.  B6h    BYTE    task status (see AX=DE2Ch)
  3136.  B7h  9 BYTEs    ???
  3137.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  3138.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  3139.  C4h  2 BYTEs    ??? (0000h)
  3140.  C6h    WORD    segment of keyboard buffer for task
  3141.  C8h    WORD    offset in common memory of ??? keyboard object
  3142.  CAh    BYTE    ???
  3143. ---v2.22-2.42
  3144.  CBh    WORD    offset in common memory of ??? object
  3145.  CEh    BYTE    ??? flag
  3146.  CFh    WORD    offset in common memory of default notify window for task
  3147.         or 0000h if none
  3148.  D1h  4 BYTEs    ???
  3149.  D5h    BYTE    window number on Switch Window menu
  3150.  D6h  5 BYTEs    ???
  3151.  DBh    WORD    offset in common memory of ??? object
  3152.  DDh  2 BYTEs    ???
  3153.  DFh    WORD    API level for task
  3154.  E1h    WORD    offset in common memory of object task is waiting on if task
  3155.         status is 'waiting', else 0000h
  3156.  E7h    WORD    segment of ???
  3157.  E9h 4    BYTEs    ???
  3158.  EDh    WORD    EMS handle of virtualization buffer, 0000h if no virtualization
  3159.  F1h 12 BYTEs    ???
  3160.  FBh    WORD    ???
  3161.  FDh    BYTE    ???
  3162.  FFh 12 BYTEs    ???
  3163. 10Bh    DWORD    pointer to process record (see below)
  3164. 10Dh 10 BYTEs    ???
  3165. 119h    DWORD    SS:SP for ???
  3166. 11Dh  4 BYTEs    ???
  3167. 121h    DWORD    pointer to ???
  3168. 125h 25 BYTEs    ???
  3169. 13Eh    DWORD    pointer to ??? in system memory
  3170. ---v2.22
  3171. 142h  3 BYTEs    ???
  3172. 145h        task's default keyboard object
  3173. ---v2.42
  3174. 142h    DWORD    pointer to first task instance data record in system memory
  3175. 148h    DWORD    pointer to last task instance data record in system memory
  3176.         (see below)
  3177. 14Ah    BYTE    ???
  3178. 14Dh 42 BYTEs    task's default keyboard object
  3179. 177h 32 BYTEs    task's ObjectQ object
  3180. 197h 41 BYTEs    task's default mailbox object
  3181. 1C0h 24 BYTEs    first register save record
  3182. 450h    --    default top of private stack
  3183. ---v2.52 (probably all DV/X)
  3184. Same as v2.60 below except there is an extra 29 bytes inserted somewhere
  3185.   before offset 9Fh, but not yet known exactly where.  Also, for the WAIT_ON
  3186.   field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
  3187.   0000h even when waiting.
  3188. ---v2.60
  3189.  CBh    WORD    ??? (added in 2.50 - rest is same as 2.42)
  3190.  CDh    WORD    offset in common memory of ??? object
  3191.  D0h    BYTE    ??? flag
  3192.  D1h    WORD    offset in common memory of default notify window for task
  3193.         or 0000h if none
  3194.  D3h  4 BYTEs    ???
  3195.  D7h    BYTE    window number on Switch Window menu
  3196.  D8h  5 BYTEs    ???
  3197.  DDh    WORD    offset in common memory of ??? object
  3198.  DFh  2 BYTEs    ???
  3199.  E1h    WORD    API level for task
  3200.  E3h    WORD    If status at B6h=waiting, offset in common memory of object
  3201.         that task is waiting on, else 0000h. (Task with CPU also
  3202.         has 0000h here)
  3203.  E9h    WORD    segment of ???
  3204.  EBh 4    BYTEs    ???
  3205.  EFh    WORD    EMS handle of virtualization buffer, 0 if no virtualization
  3206.  F3h 12 BYTEs    ???
  3207.  FDh    WORD    ???
  3208.  FFh    BYTE    ???
  3209. 101h  8 BYTEs    ???
  3210. 109h    DWORD    pointer to process record in system memory
  3211. 10Dh 14 BYTEs  ???
  3212. 11Bh    DWORD    SS:SP for ???
  3213. 11Fh  4 BYTEs    ???
  3214. 123h    DWORD    pointer to ???
  3215. 127h 25 BYTEs    ???
  3216. 140h    DWORD    pointer to ??? in system memory
  3217. 144h    DWORD    pointer to first task instance data record in system memory
  3218. 148h    DWORD    pointer to last task instance data record in system memory
  3219.          (from INT 15/AX=DE27h, see below)
  3220. 14Ch    BYTE    ???
  3221. 14Eh 42 BYTEs    task's default keyboard object
  3222. 179h 32 BYTEs    task's ObjectQ object
  3223. 199h 41 BYTEs    task's default mailbox object
  3224. 1C2h 24 BYTEs    first register save record
  3225. 452h    --    default top of private stack
  3226.  
  3227. Format of Register Save Record:
  3228. Offset    Size    Description
  3229.  00h    WORD    AX
  3230.  02h    WORD    BX
  3231.  04h    WORD    CX
  3232.  06h    WORD    DX
  3233.  08h    WORD    DI
  3234.  0Ah    WORD    SI
  3235.  0Eh    WORD    DS
  3236.  10h    WORD    ES
  3237.  12h    DWORD    return address
  3238.  16h    WORD    original flags
  3239.  
  3240. Format of mapping context record:
  3241. Offset    Size    Description
  3242.  00h    WORD    lowest segment in process's memory
  3243.         (often start of system memory chain)
  3244.  02h    WORD    size of process's memory in paragraphs
  3245.  04h    BYTE    flag: 00h if process swapped out, 01h otherwise
  3246.  05h    BYTE    flag: 00h if allocated in conventional memory, 01h if EMS
  3247.  06h  2 BYTEs    ???
  3248.  08h    WORD    EMS handle if in EMS, else 0
  3249.  0Ah  2 BYTEs    ??? (nonzero if system memory resides in shared mem???)
  3250.  0Ch    WORD    segment of system memory block that contains process record,
  3251.         referenced from segment of start of system memory chain
  3252.  0Eh    BYTE    ???
  3253.  0Fh    WORD    size of system memory block that contains process record
  3254.         and DOS memory in paragraphs
  3255.  11h    BYTE    bit flags
  3256.         Bit 0: Swapped out???
  3257.         Bit 1: ???
  3258.         Bit 2: Swapped out???
  3259.  12h    BYTE    ???
  3260.  13h    BYTE    reference count
  3261.  ---v2.31
  3262.  14h 10 BYTEs    ???
  3263.  1Eh    WORD    segment of process record
  3264.  20h  2 BYTEs    ???
  3265.  22h    WORD    segment of ???    (in first free system memory block???)
  3266.  24h    WORD    segment of end of system memory chain
  3267.  26h    WORD    segment of start of system memory chain
  3268.  28h  8 BYTEs    ???
  3269.  2Ah    DWORD    pointer to ??? (process record???)
  3270.  2Dh 10 BYTEs    ???
  3271.  37h    BYTE    lowest interrupt vector to save on context switch
  3272.  38h    BYTE    highest interrupt vector to save on context switch
  3273.  39h    WORD    offset in common memory of main task with this context
  3274.  3Ah 12 BYTEs    ???
  3275.  46h    BYTE    internal mapping context number
  3276.  47h 12 BYTEs    ???
  3277.  ---v2.5x-2.60
  3278.  14h  6 BYTEs    ???
  3279.  1Ah    WORD    segment of process record
  3280.  1Ch  2 BYTEs    ???
  3281.  1Eh    WORD    segment of first free system memory block
  3282.  20h    WORD    segment of start of system memory chain
  3283.  22h    WORD    segment of end of system memory chain
  3284.  24h 8    BYTEs    ???
  3285.  2Ch    DWORD    pointer to ??? (1 segment into process record???)
  3286.  30h 3    BYTEs    ???
  3287.  33h    WORD    Offset in common memory of main task with this context
  3288.  35h 7    BYTEs    ???
  3289.  3Ch    BYTE    internal mapping context number
  3290.  3Dh 14 BYTEs    ???
  3291.  4Bh    WORD    first DOS memory segment (first MCB segment+1)
  3292.  4Dh    BYTE    ??? (flag???)
  3293.  ---v2.53 (2.5x???)
  3294.  4Eh 12 BYTEs    ???
  3295.  ---v2.60
  3296.  4Eh    WORD    segment of script buffer (see below)
  3297.  50h  6 BYTEs    ???
  3298.  
  3299. Format of Internal Window Record (v2.31-2.60):
  3300. Offset    Size    Description
  3301.  00h    BYTE    internal window number???
  3302.  01h    BYTE    display page???
  3303.  02h    BYTE    video mode
  3304.  03h  3 BYTEs    ???
  3305.  06h    BYTE    logical window height
  3306.  07h    BYTE    logical window width
  3307.  08h    DWORD    pointer to text video buffer
  3308.  0Ch 116 BYTEs    ???
  3309.  
  3310. Format of process record (v2.31):
  3311. Offset    Size    Description
  3312. -470h 13 BYTEs    filename of ??? Script
  3313. -463h 1117 BYTEs ??? (script buffer???)
  3314.  -6h  6 BYTEs    ???
  3315.  00h    WORD    segment of parent PSP in process
  3316.  02h  5 BYTEs    ???
  3317.  07h    WORD    segment of current PSP in process
  3318.  09h    WORD    segment of first MCB in process
  3319.  0Bh 13 BYTEs    ???
  3320.  18h 1024 BYTEs process's interrupt vector table
  3321. 418h 376 BYTEs    ???
  3322. 590h        first MCB in process
  3323.  
  3324. Format of process record (v2.53-v2.60) (probably also 2.5x):
  3325. Offset    Size    Description
  3326.  00h 28 BYTEs    EXE header of last EXE, ??? if last program run was COM
  3327.  1Ch ??? BYTEs    overwritten with ASCIZ filename of last program run (EXE/COM)
  3328. 11Ch    WORD    segment of parent PSP in process
  3329. 11Eh  4 BYTEs    ???
  3330. 122h    WORD    segment of current PSP
  3331. 124h    WORD    segment of current PSP
  3332. 126h    WORD    segment of first MCB in process
  3333. 128h  4 BYTEs    ???
  3334. 12Ch    DWORD    pointer to first process instance data record in system memory
  3335. 130h    DWORD    pointer to last process instance data record in system memory
  3336.         (from INT 15/AX=DE27h, see below)
  3337. 134h  8 BYTEs    ???
  3338. 13Ch    WORD    size of current environment
  3339. 13Eh    WORD    segment of current environment
  3340. 140h    WORD    segment of current PSP
  3341. 142h    DWORD    entry point of current program
  3342. 146h 10 BYTEs    ???
  3343. ---v2.52 (v2.5x???)
  3344. 150h    BYTE    ???
  3345. 151h    WORD    segment of parent PSP in process
  3346. 153h    WORD    ???
  3347. 155h    WORD    ???
  3348. 157h    WORD    ???
  3349. 159h  4 BYTEs    ???
  3350. 15Dh    WORD    segment of current environment
  3351. 15Fh    WORD    segment of current PSP
  3352. 161h    WORD    segment of ???
  3353. 162h    WORD    ???
  3354. 164h  3 BYTEs    ???
  3355. 168h 1024 BYTEs process's interrupt vector table
  3356. 568h 120 BYTEs    ???
  3357. 5E0h        first MCB in process
  3358. ---v2.60
  3359. 150h    WORD    segment of parent PSP in process
  3360. 152h    WORD    ???
  3361. 154h    WORD    ???
  3362. 156h    WORD    ???
  3363. 158h  4 BYTEs    ???
  3364. 15Ch    WORD    segment of current environment
  3365. 15Eh    WORD    segment of current PSP
  3366. 160h    WORD    segment of ???
  3367. 162h    WORD    ???
  3368. 164h 1024 BYTEs process's interrupt vector table
  3369. 564h 108 BYTEs    ???
  3370. 5D0h        first MCB in process
  3371.  
  3372. Format of task or process instance data record (v2.5x???, v2.60):
  3373. Offset    Size    Description
  3374.  00h    DWORD    pointer to next record of same type or 00000000
  3375.  04h    DWORD    pointer to previous record of same type or 00000000
  3376.  08h    DWORD    pointer to source area of memory during restore state
  3377.  0Ch    WORD    number of bytes to save/restore
  3378.  0Eh    DWORD    pointer to destination area of memory during restore state
  3379.  12h    WORD    ??? (0)
  3380.  14h  N BYTEs    source memory buffer during restore state
  3381.  
  3382. Format of script buffer (v2.60):
  3383. Offset    Size    Description
  3384.  00h 13 BYTEs    ASCIZ Script filename
  3385.  0Dh 80 BYTEs    ???
  3386.  5Eh  N BYTEs    script records (see below)
  3387.  
  3388. Format of one script record (v2.60):
  3389. Offset    Size    Description
  3390.  00h    BYTE    signature 12h
  3391.  01h 18 BYTEs    blank-padded script name
  3392.  13h    BYTE    ASCII code of key attached to script or 0 if non-ASCII key
  3393.  14h    BYTE    scan code of key attached to script if non-ASCII, else 0
  3394.  15h    BYTE    ???
  3395.  16h    WORD    size of script in bytes
  3396.  18h  N    BYTEs    script (ASCII code of each keystroke; if 0, next byte is
  3397.         scan code of non-ASCII key)
  3398.  
  3399. Format of Common Memory Header (v2.31-2.60) (at beginning of commom mem seg):
  3400. Offset    Size    Description
  3401.  00h    WORD    offset of lowest used block
  3402.  02h    WORD    bytes of commom memory, including header
  3403.  04h    WORD    offset of first free block
  3404.  06h  N BYTEs    size depends of DV version, ??? (DVP buffer???)
  3405.  
  3406. Format of Free block header:
  3407. Offset    Size    Description
  3408.  00h    WORD    size of block in bytes including header
  3409.  02h    WORD    offset of next free block
  3410.  04h  N BYTEs    free block
  3411.  
  3412. Format of Used block header:
  3413. Offset    Size    Description
  3414.  00h    WORD    size of block in bytes including header
  3415.  02h  N BYTEs    used block
  3416. --------Q-151017-----------------------------
  3417. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  3418.     AX = 1017h
  3419. Return: pops up "Programming error" window in DV 2.x
  3420. --------Q-151018-----------------------------
  3421. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  3422.     AX = 1018h
  3423.     BH = column
  3424.     BL = row
  3425.     ES = segment of object handle for window below which to search
  3426.          0000h = start search with topmost window
  3427. Return: ES = segment of object handle for window which is visible at the
  3428.            indicated position, or covered by indicated window
  3429.        = 0000h no window
  3430. SeeAlso: AX=1023h,AX=1024h
  3431. --------Q-151019-----------------------------
  3432. INT 15 - TopView - "SOUND" - MAKE TONE
  3433.     AX = 1019h
  3434.     BX = frequency in Hertz (0000h = silence)
  3435.     CX = duration in clock ticks (18.2 ticks/sec)
  3436. Return: immediately, tone continues to completion
  3437. Notes:    if another tone is already playing, the new tone does not start until
  3438.       completion of the previous one.  Up to 32 tones may be queued before
  3439.       the process is blocked until a note completes.
  3440.     in DV 2.00, the lowest tone allowed is 20 Hz
  3441.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  3442.       notes are also cancelled
  3443. SeeAlso: INT 16/AH=73h
  3444. --------Q-15101A-----------------------------
  3445. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  3446.     AX = 101Ah
  3447. Return: stack switched
  3448. Notes:    this call may not be nested; a second call must be preceded by a call
  3449.       to "USTACK" (AX=1025h)
  3450.     while TopView requires many API calls to be executed while on the
  3451.       task's internal stack, DESQview allows those calls to be executed
  3452.       regardless of the current stack
  3453. SeeAlso: AX=1025h
  3454. --------Q-15101B-----------------------------
  3455. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  3456.     AX = 101Bh
  3457. Return: task-switching temporarily disabled
  3458. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  3459.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  3460.       will again be disabled)
  3461.     suspends the caller until DOS is free
  3462. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  3463. SeeAlso: INT 60/DI=0602h
  3464. --------Q-15101C-----------------------------
  3465. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  3466.     AX = 101Ch
  3467. Return: task-switching enabled
  3468. Note:    this API call may be made from within a hardware interrupt handler
  3469. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  3470. --------Q-15101D-----------------------------
  3471. INT 15 - TopView - "STOP" - STOP TASK
  3472.     AX = 101Dh
  3473.     ES = segment of object handle for task to be stopped
  3474.          (== handle of main window for that task)
  3475. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  3476. Note:    once a task has been stopped, additional "STOP"s are ignored
  3477. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  3478.       current task
  3479. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  3480. --------Q-15101E-----------------------------
  3481. INT 15 - TopView - "START" - START TASK
  3482.     AX = 101Eh
  3483.     ES = segment of object handle for task to be started
  3484.          (== handle of main window for that task)
  3485. Return: indicated task is started up again
  3486. Note:    once a task has been started, additional "START"s are ignored
  3487. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  3488. --------Q-15101F-----------------------------
  3489. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  3490.     AX = 101Fh
  3491.     BX = bit fields
  3492.          bits 0-12: number of characters to display
  3493.          bits 13,14: which mouse button may be pressed to remove window
  3494.              00 = either
  3495.              01 = left
  3496.              10 = right
  3497.              11 = either
  3498.          bit 15: beep if 1
  3499.     ES:DI -> text of message
  3500.     CH = width of error window (0 = default)
  3501.     CL = height of error window (0 = default)
  3502.     DX = segment of object handle
  3503. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  3504. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  3505. --------Q-151020-----------------------------
  3506. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  3507.     AX = 1020h
  3508. Return: pops up "Programming error" window in DV v2.00+
  3509. --------Q-151021-----------------------------
  3510. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  3511.     AX = 1021h
  3512.     BX = segment of object handle for task to interrupt (not self)
  3513.     DX:CX -> FAR routine to jump to next time task is run
  3514. Return: nothing
  3515. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  3516.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  3517.       needs to be preserved
  3518.     multiple PGMINTs to a single task are processed last-in first-out
  3519.     if the other task is in a DOS or DV API call, the interruption will
  3520.       occur on return from that call
  3521. --------Q-151022BX0000-----------------------
  3522. INT 15 - TopView - "GETVER" - GET VERSION
  3523.     AX = 1022h
  3524.     BX = 0000h
  3525. Return: BX nonzero, TopView or compatible loaded
  3526.     (BL = major version, BH = minor version)
  3527. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  3528. --------Q-151023-----------------------------
  3529. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  3530.     AX = 1023h
  3531.     BX = segment of object handle for parent window within which to
  3532.          position the window (0 = full screen)
  3533.     ES = segment of object handle for window to be positioned
  3534.     DL = bit flags
  3535.          bits 0,1: horizontal position
  3536.         00 = current
  3537.         01 = center
  3538.         10 = left
  3539.         11 = right
  3540.          bits 2,3: vertical position
  3541.         00 = current
  3542.         01 = center
  3543.         10 = top
  3544.         11 = bottom
  3545.          bit 4: don't redraw screen if set
  3546.          bits 5-7 not used
  3547.     CH = number of columns to offset from position specified by DL
  3548.     CL = number of rows to offset from position specified by DL
  3549. Return: nothing
  3550. --------Q-151024-----------------------------
  3551. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  3552.     AX = 1024h
  3553.     BX = segment of object handle for window
  3554.           (0 = use default)
  3555. Return: ES:DI -> virtual screen
  3556.     CX = size of virtual screen in bytes
  3557.     DL = 00h text screen
  3558.          01h graphics screen
  3559. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  3560. --------Q-151025-----------------------------
  3561. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  3562.     AX = 1025h
  3563. Return: stack switched back
  3564. Notes:    call only after having switched to internal stack with AX=101Ah
  3565.     while TopView requires many API calls to be executed while on the
  3566.       task's private stack, DESQview allows those calls to be executed
  3567.       regardless of the current stack
  3568. SeeAlso: AX=101Ah
  3569. --------Q-1510-------------------------------
  3570. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  3571.     AH = 10h
  3572.     AL = 26h thru 2Ah
  3573. Return: pops up "Programming error" window in DV 2.x
  3574. --------Q-15102B-----------------------------
  3575. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  3576.     AX = 102Bh
  3577.     BX = segment of object handle for task
  3578. Return: nothing
  3579. Note:    forces a task which is waiting on its objectq to continue by placing
  3580.       the handle for the task on the objectq
  3581. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  3582. --------Q-15102C-----------------------------
  3583. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  3584.     AX = 102Ch
  3585.     ES:DI -> contents of .PIF/.DVP file (see below)
  3586.     BX = size of .PIF/.DVP info
  3587. Return: BX = segment of object handle for new task
  3588.          0000h on error
  3589. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  3590.  
  3591. Format of .PIF/.DVP file:
  3592. Offset    Size    Description
  3593.  00h    BYTE    reserved (0)
  3594.  01h    BYTE    checksum of bytes 02h through 170h
  3595.  02h 30 BYTEs    blank-padded program title
  3596.  20h    WORD    maximum memory to allocate to partition in KB
  3597.  22h    WORD    minimum memory required in KB
  3598.  24h 64 BYTEs    ASCIZ program pathname
  3599.  64h    BYTE    default drive letter ('A',...)
  3600.  65h 64 BYTEs    ASCIZ default directory name
  3601.  A5h 64 BYTEs    ASCIZ program parameters
  3602.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  3603.  E6h    BYTE    number of text pages used
  3604.  E7h    BYTE    number of first interrupt to save
  3605.  E8h    BYTE    number of last interrupt to save
  3606.  E9h    BYTE    rows in virtual screen buffer
  3607.  EAh    BYTE    columns in virtual screen buffer
  3608.  EBh    BYTE    initial window position, row
  3609.  ECh    BYTE    initial window position, column
  3610.  EDh    WORD    system memory in KB
  3611.  EFh 64 BYTEs    ASCIZ shared program name
  3612. 12Fh 64 BYTEs    ASCIZ shared program data file
  3613. 16Fh    BYTE    flags1
  3614.         bit 7: writes text directly to screen
  3615.         bit 6: runs in foreground only (see also offset 184h)
  3616.         bit 5: uses math coprocessor
  3617.         bit 4: accesses system keyboard buffer directly
  3618.         bits 3-1: reserved (0)
  3619.         bit 0: swappable
  3620. 170h    BYTE    flags2
  3621.         bit 6: uses command-line parameters in field at A5h
  3622.         bit 5: swaps interrupt vectors
  3623. ---information unique to .DVP files---
  3624. 171h  2 BYTEs    keys to use on open menu
  3625. 173h    WORD    size of script buffer in bytes
  3626. 175h    WORD    automatically give up CPU after this many tests for keyboard
  3627.         input in one clock tick (default 0 = never)
  3628. 177h    BYTE    nonzero = "uses own colors"
  3629. 178h    BYTE    nonzero if application swappable
  3630. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  3631.         in actual .DVP files, frequently 01h
  3632. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  3633. 17Dh    BYTE    nonzero if copy-protect floppy is required
  3634. ---information unique to DESQview 2.0+---
  3635. 17Eh    BYTE    .DVP version number
  3636.         00h DESQview v1.2+
  3637.         01h DESQview v2.0+
  3638.         02h DESQview v2.2+
  3639. 17Fh    BYTE    reserved (0)
  3640. 180h    BYTE    initial number of rows in physical window
  3641. 181h    BYTE    initial number of columns in physical window
  3642. 182h    WORD    maximum expanded memory to allow, in KB
  3643. 184h    BYTE    flags3
  3644.         bit 7: automatically assign window position
  3645.         bit 5: maximum memory value has been specified
  3646.         bit 4: disallow "Close" command
  3647.         bit 3: foreground-only when doing graphics
  3648.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  3649.         bit 2: don't virtualize (see also offset 18Bh)
  3650.         bit 1: foreground-only during DOS calls
  3651.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  3652. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  3653.         bit 3: save/restore entire INT 09 handler state every taskswtch
  3654.         bit 2: take special precautions for programs which read the
  3655.             BIOS keyboard buffer directly from memory
  3656.         bit 1: never indicate keystroke available during scripts/xfers
  3657.         bit 0: only indicate keystroke available every sixth poll
  3658. 186h    BYTE    number of graphics pages used
  3659. 187h    WORD    extra system memory size
  3660. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  3661. ---information unique to DESQview 2.2+---
  3662. 18Ah    BYTE    serial port usage
  3663.         FFh uses all serial ports
  3664.         00h no serial ports
  3665.         01h only COM1
  3666.         02h only COM2
  3667. 18Bh    BYTE    flags4
  3668.         bit 7: automatically close application on exit if .COM or .EXE
  3669.             specified (see also offset 17Ch)
  3670.         bit 6: swappable if not using serial ports
  3671.         bit 5: start program with window hidden (v2.26+)
  3672.         bit 4: start program in background (v2.26+)
  3673.         bit 3: virtualize text (see also offset 184h)
  3674.         bit 2: virtualize graphics (see also offset 184h)
  3675.         bit 1: share CPU when foreground
  3676.         bit 0: share EGA when foreground and zoomed
  3677. 18Ch    BYTE    protection level for 386 machines
  3678. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  3679. ---information unique to DESQview/X 1.0---
  3680. 18Dh    BYTE    X flags
  3681.         bits 3-7: unused (0)
  3682.         bit 2: don't display wait message when opening window
  3683.         bit 1: don't display DOS window
  3684.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  3685.                (NEWPROC) inherit DOS client layer usage
  3686. 18Eh    BYTE    X keyboard behavior (0-3)
  3687. 18Fh    BYTE    font scaling
  3688.         00h fixed fonts
  3689.         01h scalable fonts
  3690. 190h 10 BYTEs    reserved (0)
  3691. 19Ah    WORD    length of data follownig XDVP signature
  3692. 19Ch  4 BYTEs    signature "XDVP"
  3693. 1A0h  N BYTEs    list of variable length records (see below)
  3694.  
  3695. Format of variable length record:
  3696. Offset    Size    Description
  3697.  00h    WORD    length of following record, 0000h if end of record list
  3698.  02h    BYTE    record type
  3699.         01h script filename, up to 64 characters
  3700.         02h command-line parameters (allows >64 characters on cmdline)
  3701.         03h environment inheritance
  3702.         04h environment string
  3703.         05h starting window position
  3704. ---types 01h,02h,04h---
  3705.  03h  N BYTEs    ASCII data
  3706. ---type 03h---
  3707.  03h    BYTE    inheritance
  3708.         00h do not inherit
  3709.         01h inherit environment
  3710. ---type 05h---
  3711.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  3712.         starting row, starting column, starting height, starting width
  3713. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  3714.       only the last instance of each type is used; multiple occurrences of
  3715.       type 04h are concatenated
  3716. --------Q-15102D-----------------------------
  3717. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  3718.     AX = 102Dh
  3719.     BL = subfunction
  3720.          00h determine whether using keyboard mouse
  3721.         Return: BL = 00h using real mouse
  3722.                  01h using keyboard mouse
  3723.          01h turn keyboard mouse on
  3724.          02h turn keyboard mouse off
  3725. --------Q-15102E-----------------------------
  3726. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  3727.     AX = 102Eh
  3728.     BX = number of bytes
  3729. Return: AX = status
  3730.         0000h successful
  3731.         ES:DI -> allocated system memory
  3732.         0001h failed
  3733.         ES:DI = 0000h:0000h
  3734. Note:    under DV 2.42, this call is identical to AX=1001h
  3735. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  3736.  
  3737. Format of system memory block header (one paragraph before memory block):
  3738. Offset    Size    Description
  3739.  00h    WORD    segment of next header or 0000h
  3740.  02h    WORD    segment of previous header or 0000h
  3741.  04h    WORD    size of block in paragraphs, including header
  3742.  06h    BYTE    availability flag (00h in use, 01h free)
  3743. --------Q-1511-------------------------------
  3744. INT 15 - TopView commands
  3745.     AH = 11h
  3746.     AL = various (except 17h)
  3747. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  3748.       see those below
  3749. SeeAlso: AH=DEh
  3750. --------T-1511-------------------------------
  3751. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  3752.     AH = 11h
  3753.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  3754.             request (max len = 127)
  3755. Return: AX = status (SYS_OK or SYS_ERROR)
  3756. SeeAlso: AH=0Ch"VMiX"
  3757. --------T-1511-------------------------------
  3758. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  3759.     AH = 11h
  3760. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  3761. SeeAlso: AH=12h"MultiDOS"
  3762. Index:    hotkeys;MultiDOS Plus
  3763. --------Q-151117BX0000-----------------------
  3764. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  3765.     AX = 1117h
  3766.     BX = 0000h    get current mapping context without setting
  3767.          nonzero    set new mapping context
  3768. Return: BX = mapping context in effect before call
  3769.     interrupts enabled
  3770. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  3771.     mapping contexts determine conventional-memory addressability; setting
  3772.       a mapping context ensures that the associated program and data areas
  3773.       are in memory for access.  Usable by drivers, TSRs and shared
  3774.       programs.
  3775.     caller need not be running under DESQview, but must ensure that the
  3776.       stack in use will not be mapped out by the call
  3777. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  3778. --------m-1511DE-----------------------------
  3779. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  3780.     AX = 11DEh
  3781. Return: CF clear if installed
  3782.         AX = segment at which QEXT.SYS is located
  3783. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  3784.       versions also implement the XMS standard
  3785. Note:    a private entry point may be found by searching the beginning of the
  3786.       returned segment for the signature string
  3787.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  3788.       prior to the signature contains the QEXT version number in BCD,
  3789.       and the word prior to that contains the offset within the QEXT
  3790.       code segment of the private entry point
  3791. SeeAlso: INT 2F/AX=4310h,INT 67/AH=3Fh
  3792.  
  3793. Call private entry point with:
  3794.     AH = 00h ???
  3795.     AH = nonzero ???
  3796. --------T-1512-------------------------------
  3797. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  3798.     AH = 12h
  3799.     STACK:    WORD    process ID
  3800. Return: AX = status (SYS_OK or SYS_ERROR)
  3801. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  3802. --------T-1512-------------------------------
  3803. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  3804.     AH = 12h
  3805. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  3806. SeeAlso: AH=11h"MultiDOS"
  3807. Index:    hotkeys;MultiDOS Plus
  3808. --------Q-1512--BH00-------------------------
  3809. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  3810.     AH = 12h
  3811.     BH = 00h
  3812.     BL = which handle to return
  3813.         00h handle in DWORD on top of stack
  3814.         01h current task's window handle
  3815.         02h given task's mailbox handle (task's handle on stack)
  3816.         03h current task's mailbox handle
  3817.         04h given task's keyboard handle (task's handle on stack)
  3818.         05h current task's keyboard object handle
  3819.         06h given task's OBJECTQ handle (task's handle on stack)
  3820.         07h current task's OBJECTQ handle
  3821.         08h      \
  3822.           thru > return 0000:0000 under DV < 2.26
  3823.         10h      /
  3824.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  3825.         0Dh (2.26+) task handle of owner (parent) of current task
  3826. Return: DWORD on top of stack is object handle
  3827. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  3828.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  3829.       window)
  3830. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  3831. --------Q-1512--BH01-------------------------
  3832. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  3833.     AH = 12h
  3834.     BH = 01h
  3835.     BL = object type to create
  3836.         00h (DV 2.0x only) handle is DWORD on top of stack
  3837.         01h (DV 2.0x only) use task's window handle
  3838.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  3839.         03h (DV 2.0x only) current task's mailbox
  3840.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  3841.         05h (DV 2.0x only) current task's keyboard object
  3842.         08h WINDOW class
  3843.         09h MAILBOX class
  3844.         0Ah KEYBOARD class
  3845.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  3846.         0Fh POINTER object
  3847.         10h PANEL object
  3848.     STACK: (if window object or WINDOW class)
  3849.            DWORD address to jump to (no new task if high word == 0)
  3850.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  3851.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  3852.            DWORD bytes system memory for input buffer for READ/READN
  3853.             (0 == none, -1 == default--same as logical window size)
  3854.            DWORD window size, columns
  3855.            DWORD window size, rows
  3856.            DWORD length of window title
  3857.            DWORD address of window title
  3858. Return: DWORD on top of stack is new object handle
  3859. Notes:    if a new task is created, it is started with
  3860.       AX = BX = SI = DI = BP = 0
  3861.       DX:CX = handle of parent task
  3862.       DS = ES = SS = segment of private stack (and new task's handle)
  3863.     new windows are orphans, inherit the colors/hidden status of the
  3864.       creating task's window, and are placed in the upper left hand corner
  3865.       of the screen but not automatically redrawn
  3866.     new keyboards are closed, and have all object bits cleared except for
  3867.       the hardware cursor bit
  3868. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  3869. --------Q-1512--BH02-------------------------
  3870. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  3871.     AH = 12h
  3872.     BH = 02h
  3873.     BL = object
  3874.         00h handle in DWORD on top of stack
  3875.         window: close window and free
  3876.         timer: free timer
  3877.         panel: free panel object
  3878.         pointer: free pointer
  3879.         01h task's window handle - kills task, never returns
  3880.         02h given task's mailbox (task's handle on top of stack)
  3881.         03h current task's mailbox
  3882.         04h given task's keyboard (task's handle on top of stack)
  3883.         05h current task's keyboard object
  3884. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  3885.       task windows also free any mailbox, objectq, and panel objects held
  3886.       by the task and any child tasks
  3887.     if the keyboard being freed is the default keyboard for a task, this
  3888.       call is equivalent to CLOSE
  3889.     panel and pointer objects are automatically closed if open
  3890. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  3891. --------Q-1512--BH03-------------------------
  3892. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  3893.     AH = 12h
  3894.     BH = 03h
  3895.     BL = object
  3896.         00h mailbox handle in DWORD on top of stack
  3897.         02h sender of last msg read from mailbox (task's handle on stack)
  3898.         03h sender of last msg read from current task's mailbox
  3899. Return: DWORD on stack is task handle of message sender
  3900. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  3901. --------Q-1512--BH03-------------------------
  3902. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  3903.     AH = 12h
  3904.     BH = 03h
  3905.     BL = window to be connected
  3906.         00h handle of window to be attached in DWORD on top of stack
  3907.         01h attach current task's main window
  3908.     STACK: DWORD handle of window to attach to or 00000000h to detach
  3909. Return: STACK popped
  3910. Notes:    when two windows are connected, both will move if the user moves either
  3911.     multiple windows may be attached to a single window, but each window
  3912.       may only be attached to one window at a time
  3913. SeeAlso: AH=12h/BH=83h
  3914. --------Q-1512--BX0300-----------------------
  3915. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  3916.     AH = 12h
  3917.     BX = 0300h
  3918.     STACK: DWORD handle of panel object
  3919. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  3920.            DWORD address of directory
  3921. Note:    a null string is returned if the object is not open
  3922. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  3923.  
  3924. Format of panel file:
  3925. Offset    Size    Description
  3926.  00h  2 BYTEs    C0h C3h
  3927.  02h    BYTE    number of panels in file
  3928.  03h    for each panel in file:
  3929.         8 BYTEs  blank-padded panel name
  3930.           DWORD  panel offset in file
  3931.           WORD   panel length
  3932.     data for panels (each consists of one or more window/query/manager
  3933.     streams)
  3934.         first byte of each panel must be 1Bh, fifth byte must be E5h
  3935. --------Q-1512--BH04-------------------------
  3936. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  3937.     AH = 12h
  3938.     BH = 04h
  3939.     BL = window to read from
  3940.         00h handle is DWORD on top of stack
  3941.         01h use calling task's default window
  3942.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  3943.         0Dh (DV 2.26+) default window of parent task of current task
  3944. Return: STACK:    DWORD number of bytes read
  3945.         DWORD address of buffer
  3946. Notes:    reading starts at the current logical cursor position; the cursor is
  3947.       updated to point at the character following the last one read
  3948.     any translucent blanks (FFh) which are visible on screen are changed
  3949.       to the character which is seen through them
  3950.     the string produced by the read is placed in an input buffer which may
  3951.       be reused by the next READ or READN of a window
  3952.     window stream opcodes D8h and D9h determine whether the read returns
  3953.       characters or attributes
  3954. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  3955. --------Q-1512--BH04-------------------------
  3956. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  3957.     AH = 12h
  3958.     BH = 04h
  3959.     BL = object
  3960.         00h handle is DWORD on top of stack
  3961.         mailbox: wait for and get next message
  3962.         keyboard: wait for and get pointer to next input buffer
  3963.         pointer: wait for and get next message
  3964.         02h get next message from mailbox (task's handle on top of stack)
  3965.         03h get next message from current task's mailbox
  3966.         04h get the next input from keyboard (handle on top of stack)
  3967.         05h get the next input from task's default keyboard
  3968.         06h wait for input from any object in OBJECTQ (handle on stack)
  3969.         07h wait for input from any object in task's default OBJECTQ
  3970. Return: STACK: (if objectq) DWORD handle of object with input
  3971.            (otherwise)  DWORD number of bytes
  3972.                 DWORD address
  3973. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  3974.       containing the character code as returned by the BIOS; the BIOS scan
  3975.       code is available via the STATUS call if the character is zero
  3976.     for a keyboard in field mode, the input buffer format is determined
  3977.       by the field table header for the window the keyboard is attached to
  3978.     keyboard input buffers and mailbox message buffers may be invalidated
  3979.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  3980. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  3981.  
  3982. Format of pointer message:
  3983. Offset    Size    Description
  3984.  00h    WORD    row
  3985.  02h    WORD    column
  3986.  04h    BYTE    status
  3987.         bit 7: set when press/release mode active and button pressed
  3988.         bit 6: set when press/release mode active and button released
  3989.         bits 7-2: number of clicks-1 if multiple-click mode active
  3990.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  3991.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  3992. --------Q-1512--BX0400-----------------------
  3993. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  3994.     AH = 12h
  3995.     BX = 0400h
  3996.     STACK: DWORD timer's handle
  3997. Return: after timer expires
  3998.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  3999. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  4000. --------Q-1512--BX0400-----------------------
  4001. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  4002.     AH = 12h
  4003.     BX = 0400h
  4004.     STACK: DWORD handle of panel object
  4005.            DWORD window's handle (or 0 for current task's window)
  4006.            DWORD length of panel name
  4007.            DWORD pointer to panel name
  4008. Return: STACK: DWORD handle of window which was used
  4009.            DWORD handle of keyboard or 0
  4010. Notes:    status of APPLY may be checked with STATUS message
  4011.     panel MUST have the following format
  4012.       first byte must be 1Bh (i.e. must start with a stream)
  4013.       first opcode in stream must be E5h
  4014.         single byte arg of opcode is interpreted thus:
  4015.           bits 7,6    11 means create new window
  4016.             10 means create new field table for existing window
  4017.             01 means use existing window and field table
  4018.           bit 5 if set, panel contains a field table
  4019.             (creates a new keyboard and puts it in field mode)
  4020.           bit 4 if set, panel contains input fields
  4021.           bit 3 if set, panel contains select fields but no input fields
  4022.     if the panel contains input or select fields, a keyboard handle is
  4023.       returned; either the window's current open keyboard or a
  4024.       newly-created keyboard object.  The caller should read that keyboard
  4025.       to obtain input from the panel.
  4026. SeeAlso: AH=12h/BH=84h
  4027. --------Q-1512--BH05------------------------
  4028. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  4029.     AH = 12h
  4030.     BH = 05h
  4031.     BL = object
  4032.         00h handle is DWORD on top of stack
  4033.         timer: start timer to end at a specified time
  4034.         keyboard: add input buffer to queue
  4035.         pointer: move pointer icon to specified position
  4036.         02h send message by value/status=0 to mbox (task's handle on stack)
  4037.         03h send message by value/status=0 to current task's mailbox
  4038.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  4039.         05h add input buffer to task's default KEYBOARD queue
  4040.         06h add an object to OBJECTQ (handle on top of stack)
  4041.         07h add an object to task's default OBJECTQ
  4042.     STACK: (if mailbox)  DWORD length
  4043.                  DWORD address
  4044.            (if keyboard) DWORD status (scan code in keystroke mode)
  4045.                  DWORD length (should be 1 in keystroke mode)
  4046.                  DWORD address
  4047.            (if objectq)  DWORD handle of object to add
  4048.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  4049.                    only accurate to 1/18 sec)
  4050.            (if pointer)  DWORD column relative to origin of window
  4051.                  DWORD row relative to origin of window
  4052. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  4053.     the data and status written to a keyboard object must match the format
  4054.       returned by the keyboard object in the current mode
  4055.     the pointer position is scaled according to the current scaling factors
  4056. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  4057. --------Q-1512--BH05-------------------------
  4058. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  4059.     AH = 12h
  4060.     BH = 05h
  4061.     BL = window to write to
  4062.         00h DWORD on top of stack is window handle
  4063.         01h write string to task's default window
  4064.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  4065.         0Dh (DV 2.26+) default window of parent of current task
  4066.     STACK: DWORD object handle if handle passed on stack
  4067.            DWORD total length of string (high word == 0)
  4068.            DWORD address of string to display
  4069. Return: indicated actions performed
  4070.     a. non-control characters are displayed (opcodes DEh and DFh control
  4071.        whether the attributes are left or changed to the current attrib)
  4072.     b. CR/LF/BS/Tab cause the usual cursor movement
  4073.     c. ESC starts a data structure with additional commands if following
  4074.        byte is less than 20h; otherwise, it is written to the window
  4075.     STACK:    DWORD handle of new window if window stream opcode E6h
  4076.         else nothing
  4077. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  4078.  
  4079. Data Structure:
  4080.     MAGIC  DB  1Bh
  4081.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  4082.     LENGTH DW  ?   ; length of remainder in bytes
  4083.     var-length fields follow, each an OPCODE followed by
  4084.          zero or more args
  4085.  
  4086. MODE 00h (set or display values) "WINDOW STREAM"
  4087.     Opcodes:args
  4088.     00h  display 20h blanks with the default attribute
  4089.     01h-1Fh display OPCODE blanks with the default attribute
  4090.     20h  display char with default attribute 20h times
  4091.          BYTE char to repeat
  4092.     21h-3Fh display char with default attribute OPCODE-20h times
  4093.          BYTE char to repeat
  4094.     40h  display 20h blanks with specified attribute
  4095.          BYTE attribute of blanks
  4096.     41h-5Fh display OPCODE-40h blanks with specified attribute
  4097.          BYTE attribute of blanks
  4098.     60h  display next 20h characters
  4099.          20h BYTEs characters to display
  4100.     61h-7Fh display next OPCODE-60h characters
  4101.          N BYTEs characters to display
  4102.     80h-87h     display N blanks with default attribute
  4103.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  4104.               [000h means 800h]
  4105.     88h-8Fh display N copies of the character
  4106.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  4107.               [000h means 800h]
  4108.          BYTE character to repeat
  4109.     90h-97h     display N blanks with specified attribute
  4110.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  4111.               [000h means 800h]
  4112.          BYTE attribute
  4113.     98h-9FH     display string at logical cursor pos
  4114.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  4115.               [000h means 800h]
  4116.          N BYTEs string to display
  4117.     A0h  set logical cursor row
  4118.          BYTE row number (0 is top)
  4119.     A1h  set logical cursor column
  4120.          BYTE column number (0 is leftmost)
  4121.     A2h  set top edge of scrolling region
  4122.          BYTE row
  4123.     A3h  set left edge of scrolling region
  4124.          BYTE column
  4125.     A4h  set row of physical window position
  4126.          BYTE line
  4127.     A5h  set column of physical window position
  4128.          BYTE column
  4129.     A6h  set height of physical window
  4130.          BYTE #rows
  4131.     A7h  set width of physical window
  4132.          BYTE #columns
  4133.     A8h  set viewport row
  4134.          BYTE row
  4135.     A9h  set viewport column
  4136.          BYTE column
  4137.     AAh  set virtual screen height [contents of window unpredictable after]
  4138.          BYTE rows
  4139.     ABh  set virtual screen width [contents of window unpredictable after]
  4140.          BYTE columns
  4141.     ACh-AEh     unused
  4142.     AFh  set compatible/preferred video modes
  4143.          BYTE compatibility/preference mask
  4144.         bit 7    compatible with monochrome
  4145.         bit 6    compatible with color text, EGA/VGA graphics
  4146.         bit 5    compatible with medium-resolution CGA graphics
  4147.         bit 4    compatible with high-resolution CGA graphics
  4148.         bit 3    prefer monochrome
  4149.         bit 2    prefer color text, EGA/VGA graphics
  4150.         bit 1    prefer medium-resolution CGA graphics
  4151.         bit 0    prefer high-resolution CGA graphics
  4152.     B0h  move logical cursor down
  4153.          BYTE #rows (signed, negative values move up)
  4154.             [if #rows=0 and hardware cursor owner, update hw crsr]
  4155.     B1h  move logical cursor right
  4156.          BYTE #cols (signed, negative values move left)
  4157.             [if #cols=0 and hardware cursor owner, update hw crsr]
  4158.     B2h  shift top edge of scrolling region
  4159.          BYTE #rows (signed)
  4160.     B3h  shift left edge of scrolling region
  4161.          BYTE #cols (signed)
  4162.     B4h  shift physical window down
  4163.          BYTE #lines (signed)
  4164.     B5h  shift physical window right
  4165.          BYTE #columns (signed)
  4166.     B6h  expand physical window vertically
  4167.          BYTE #lines (signed)
  4168.     B7h  expand physical window horizontally
  4169.          BYTE #columns (signed)
  4170.     B8h  adjust viewport row
  4171.          BYTE #rows (signed)
  4172.     B9h  adjust viewport column
  4173.          BYTE #columns (signed)
  4174.     BAh  adjust virtual screen height [contents of window unpredict after]
  4175.          BYTE #rows to increase (signed)
  4176.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  4177.          BYTE #cols to increase (signed)
  4178.     BCh-BFh     reserved (currently unused)
  4179.     C0h  set logical cursor position
  4180.          BYTE row number (0 is top border)
  4181.          BYTE column number (0 is left border)
  4182.     C1h  set top left corner of scrolling region
  4183.          BYTE row
  4184.          BYTE column
  4185.     C2h  set physical window pos
  4186.          BYTE upper left row (no top border if 0)
  4187.          BYTE upper left column (no left border if 0)
  4188.     C3h  set current window size
  4189.          BYTE #rows
  4190.          BYTE #cols
  4191.     C4h  set upper left corner of viewport (portion of virtual screen
  4192.          displayed in window)
  4193.          BYTE row
  4194.          BYTE column
  4195.     C5h  set size of virtual screen [contents unpredictable afterwards]
  4196.          BYTE #rows
  4197.          BYTE #cols
  4198.     C6h  unused
  4199.     C7h  unused
  4200.     C8h  set logical cursor relative to current position
  4201.          BYTE number of rows to move down (signed)
  4202.          BYTE number of columns to move right (signed)
  4203.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  4204.     C9h  shift top left corner of scrolling region
  4205.          BYTE #rows (signed)
  4206.          BYTE #cols (signed)
  4207.     CAh  set window pos relative to current position
  4208.          BYTE number of rows to shift down (signed)
  4209.          BYTE number of columns to shift right (signed)
  4210.     CBh  set window size relative to current size
  4211.          BYTE number of rows to expand (signed)
  4212.          BYTE number of cols to expand (signed)
  4213.     CCh  shift viewport relative to current position
  4214.          BYTE rows to shift (signed)
  4215.          BYTE cols to shift (signed)
  4216.     CDh  resize virtual screen
  4217.          BYTE #rows to expand (signed)
  4218.          BYTE #cols to expand (signed)
  4219.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  4220.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  4221.     D0h  allow window frame to extend beyond screen
  4222.     D1h  always display a complete frame, even if window extends beyond
  4223.          edge of screen
  4224.     D2h  allow DV to change logical colors on video mode switch (default)
  4225.     D3h  application changes logical attributes
  4226.     D4h  window is visible [must redraw to actually make visible]
  4227.     D5h  window is hidden [must redraw to actually remove]
  4228.     D6h  window has frame (default)
  4229.     D7h  window unframed [must redraw to actually remove frame]
  4230.     D8h  READ/READN will read characters from window (default)
  4231.     D9h  READ/READN will read attributes from window
  4232.     DAh  use logical attributes, which may be remapped
  4233.         attributes
  4234.            1 normal text
  4235.            2 highlighted normal text
  4236.            3 help text
  4237.            4 highlighted help text
  4238.            5 error message
  4239.            6 highlighted error message
  4240.            7 emphasized text
  4241.            8 marked text
  4242.            9-16 are reverse video versions of 1-8
  4243.     DBh  use physical attributes for characters
  4244.     DCh  enable special actions for control characters (default)
  4245.     DDh  disable special control char handling, all chars displayable by
  4246.          BIOS TTY call
  4247.     DEh  write both character and attribute (default)
  4248.     DFh  write character only, leave attribute untouched
  4249.     E0h  repeat following commands through E1h opcode
  4250.          BYTE number of times to repeat (00h means 256 times)
  4251.     E1h  end of commands to repeat, start repeating them
  4252.     E2h  set current output color
  4253.          BYTE color
  4254.     E3h  clear virtual screen from scroll origin to end using current color
  4255.     E4h  redraw window
  4256.     E5h  select menu style
  4257.          BYTE style (normally 18h)
  4258.         bits 5,4 = 01 use two-letter menu entries for remainder of
  4259.           this stream
  4260.     E5h  (panel file only)
  4261.          BYTE modifier
  4262.         bits 7,6 = 11 panel stream creates new window
  4263.              = 10 panel defines new field table for existing window
  4264.              = 01 panel stream uses existing window & field table
  4265.         bit 5 = 1 stream contains a field table (create kyboard object)
  4266.         bit 4 = 1 stream defines input fields (create keyboard object)
  4267.         bit 3 = 1 stream defines select fields but not input fields
  4268.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  4269.         bit 1 reserved
  4270.         bit 0 reserved
  4271.     E6h  create new window and perform rest of manipulations in new window
  4272.          BYTE number of rows
  4273.          BYTE number of columns
  4274.          Return: DWORD object handle of new window returned on stack at end
  4275.          Note: the window is created with a physical size of 0x0 at the
  4276.              same position as the window to which this stream was sent
  4277.     E7h  no operation
  4278.     E8h  scroll area up (top left corner defined by opcode C1h)
  4279.          BYTE height
  4280.          BYTE width
  4281.     E9h  scroll area down (top left corner defined by opcode C1h)
  4282.          BYTE height
  4283.          BYTE width
  4284.     EAh  scroll area left (top left corner defined by opcode C1h)
  4285.          BYTE height
  4286.          BYTE width
  4287.     EBh  scroll area right (top left corner defined by opcode C1h)
  4288.          BYTE height
  4289.          BYTE width
  4290.     ECh  set logical attributes for window contents
  4291.          BYTE video modes command applies to
  4292.         bit 7    monochrome
  4293.         bit 6    color text, EGA/VGA graphics
  4294.         bit 5    medium-resolution CGA graphics
  4295.         bit 4    high-resolution CGA graphics
  4296.          BYTE which attributes to set
  4297.         bit 7  if set, copy single following byte to indicated attribs
  4298.         bits 4-6  # of first attribute to change - 1
  4299.         bits 0-3  # of consecutive attributes to change
  4300.          N BYTEs new attributes
  4301.     EDh  set logical attributes for window frame
  4302.          BYTE video modes command applies to (see opcode ECh)
  4303.          BYTE which attributes to set
  4304.         bit 7  if set, copy single following byte to indicated attrs
  4305.         bits 4-6  # of first attribute to change - 1
  4306.         bits 0-3  # of consecutive attributes to change
  4307.          N BYTEs new attributes
  4308.           attributes
  4309.                1 = top left corner
  4310.                2 = top right corner
  4311.                3 = bottom left corner
  4312.                4 = bottom right corner
  4313.                5 = top edge
  4314.                6 = bottom edge
  4315.                7 = left edge
  4316.                8 = right edge
  4317.     EEh  set characters for window frame
  4318.          BYTE video modes command applies to (see opcode ECh)
  4319.          BYTE which characters to set
  4320.         bit 7  if set, copy single following byte to indicated chars
  4321.         bits 4-6  # of first char to change - 1
  4322.         bits 0-3  # of consecutive chars to change
  4323.          N BYTEs new chars (same relative position as attributes above)
  4324.     EFh  set window name
  4325.          BYTE length of name (should be in range 0 to logical screen width)
  4326.          N BYTEs name
  4327.     F0h  clear input field to blanks
  4328.          BYTE field number
  4329.     F1h  fill input field with character
  4330.          BYTE field number
  4331.          BYTE char
  4332.     F2h  set color of input field
  4333.          BYTE field number (1-N)
  4334.          BYTE attribute
  4335.     F3h  set initial contents of input field
  4336.          BYTE field number (1-N)
  4337.          N BYTEs enough chars to exactly fill field as defined by op FFh
  4338.     F4h  position cursor to start of specific input field
  4339.          BYTE field number (1-N)
  4340.     F5h  change field table entry
  4341.          BYTE field number
  4342.          7-8 BYTEs field table entry (see opcode FFh below)
  4343.     F6h  set field type
  4344.          BYTE field number
  4345.          BYTE type
  4346.             00h inactive
  4347.             40h output field
  4348.             80h input field
  4349.             C0h deselected field
  4350.             C2h selected field
  4351.     F7h  "broadcast write"    write data to fields with program output bit
  4352.         set in field table entry, in field number order
  4353.          N BYTEs (total length of all program output fields)
  4354.     F8h  scroll field up a line
  4355.          BYTE field number
  4356.     F9h  scroll field down a line
  4357.          BYTE field number
  4358.     FAh  scroll field left
  4359.          BYTE field number
  4360.     FBh  scroll field right
  4361.          BYTE field number
  4362.     FCh  set field table header
  4363.          BYTE number of fields (must be <= existing number of fields)
  4364.          BYTE screen behavior bits
  4365.         bit 7  reserved
  4366.         bit 6  set if menu items may be selected via keyboard
  4367.         bit 5  set if left mouse button in "status" mode (press
  4368.             anywhere in window immediately returns control to app)
  4369.         bit 4  set if right mouse button in "status" mode
  4370.         bit 3  if set, select fields return contents or blanks rather
  4371.             than 'Y' or 'N'
  4372.         bit 2  if set, modified bits reset on return to application
  4373.         bits 0,1 = 00 no data returned on read of keyboard
  4374.                01 data returned as array of chars containing
  4375.                 all fields packed together, with no field
  4376.                 numbers
  4377.                10 data returned as numbered variable-length
  4378.                 records for all fields
  4379.                11 data returned as numbered variable-length
  4380.                 records for the fields which were modified
  4381.          BYTE current input field (updated by DESQview)
  4382.          BYTE current select field (updated by DESQview)
  4383.          BYTE attribute for select fields when they are pointed at
  4384.          BYTE attribute for select fields which have been selected
  4385.     FDh  reset modified bit for all fields
  4386.     FEh  reset selected and modified bits for all fields
  4387.     FFh  set up input fields
  4388.          6 BYTEs table header (see opcode FCh above)
  4389.          the field table entries, one for each field
  4390.          BYTE start row       \
  4391.          BYTE start column  \ if menu selection and start is to
  4392.          BYTE end row        / right or below end, select from kbd only
  4393.          BYTE end column   /
  4394.          BYTE field type
  4395.             bits 7,6 = 00 inactive (non-entry) field
  4396.                    01 echos keystrokes input to make menu selection
  4397.                    10 fill-in field
  4398.                    11 select field
  4399.             bit 5  field can be filled by broadcast write (F7h opcode)
  4400.             bit 4  reserved
  4401.             bit 3  reserved
  4402.             bit 2  reserved
  4403.             bit 1  set if field selected
  4404.             bit 0  set if field modified
  4405.          BYTE modifier
  4406.               if type is fill-in, then bit flags to determine behavior
  4407.               bit 7     if set, automatically enter CR when field full
  4408.               bit 6     move to next field when current field is full
  4409.               bit 5     if set, enter text from right end (for numbers)
  4410.               bit 4     if set, force input to uppercase
  4411.               bit 3     if set, clear old contents on first keystroke
  4412.               bit 2     if set, input returned when cursor moves out
  4413.                  of modified field ("validate",API level 2.02+)
  4414.               bit 1     reserved
  4415.               bit 0     reserved
  4416.               if select field, first key to press to activate
  4417.               00h if have to point-&-click or is an extended-ASCII
  4418.                   keystroke (only if two-key menus enabled)
  4419.          BYTE (select field only) normal color of field
  4420.          BYTE second key for select field.  This byte is present iff
  4421.               two-letter menu entries selected with opcode E5h, and
  4422.               in that case is present regardless of field type
  4423.          Note: DESQview uses and updates the actual copy of the information
  4424.            which is contained in the stream.  Thus this info must remain
  4425.            intact until after the data entry is complete.
  4426.  
  4427. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  4428.     A0h return logical cursor row in next byte
  4429.     A1h return logical cursor column in next byte
  4430.     A2h return top row of scrolling region in next byte
  4431.     A3h return left column of scrolling region in next byte
  4432.     A4h return row of physical window origin in next byte
  4433.     A5h return column of physical window origin in next byte
  4434.     A6h return height of physcial window in next byte
  4435.     A7h return width of physical window in next byte
  4436.     A8h return row of viewport origin in next byte
  4437.     A9h return column of viewport origin in next byte
  4438.     AAh return height of virtual screen in next byte
  4439.     ABh return width of virtual screen in next byte
  4440.     AFh return current video mode in next byte
  4441.     C0h return current logical cursor position in next two bytes
  4442.     C1h return top left corner of scrolling region in next two bytes
  4443.     C2h return current window position in next two bytes
  4444.     C3h return current window size in next two bytes
  4445.     C4h return current viewport origin in next two bytes
  4446.     C5h return current virtual screen size in next two bytes
  4447.     D0h \ overwritten with D0h if frames may fall off screen edge
  4448.     D1h /               D1h if frames always displayed entirely
  4449.     D2h \ overwritten with D2h if DESQview controls color palette
  4450.     D3h /               D3h if application changes color palette
  4451.     D4h \ overwritten with D4h if window visible
  4452.     D5h /               D5h if window hidden
  4453.     D6h \ overwritten with D6h if window has frame
  4454.     D7h /               D7h if window unframed
  4455.     D8h \ overwritten with D8h if reading characters from window
  4456.     D9h /               D9h if reading attributes from window
  4457.     DAh \ overwritten with DAh if using logical attributes
  4458.     DBh /               DBh if using physical attributes
  4459.     DCh \ overwritten with DCh if TTY control char interpretation on
  4460.     DDh /               DDh if TTY control char interpretation off
  4461.     DEh \ overwritten with DEh if writing both characters and attributes
  4462.     DFh /               DFh if leaving attributes untouched
  4463.     E2h return current color in next byte
  4464.     ECh get logical attributes for window contents
  4465.         BYTE execute call if currently in specified video mode
  4466.         bit 7    monochrome
  4467.         bit 6    color text, EGA/VGA graphics
  4468.         bit 5    medium-resolution CGA graphics
  4469.         bit 4    high-resolution CGA graphics
  4470.         BYTE which attributes to get
  4471.         bit 7 unused???
  4472.         bits 4-6 first attribute to get - 1
  4473.         bits 0-3 # consecutive attributes
  4474.         N BYTEs buffer to hold attributes
  4475.     EDh get logical attributes for window frame
  4476.         BYTE execute call if currently in video mode (see opcode ECh)
  4477.         BYTE which attributes to get
  4478.         bit 7 unused???
  4479.         bits 4-6 first attribute to get - 1
  4480.         bits 0-3 # consecutive attributes
  4481.         N BYTEs buffer to hold attributes
  4482.     EEh get characters for window frame
  4483.         BYTE execute call if currently in video mode (see opcode ECh)
  4484.         BYTE which attributes to get
  4485.         bit 7 unused???
  4486.         bits 4-6 first char to get - 1
  4487.         bits 0-3 # consecutive chars
  4488.         N BYTEs buffer to hold chars
  4489.     EFh return first N characters of current window name
  4490.         BYTE    max length of returned name
  4491.         N BYTEs buffer to hold window name
  4492.     F3h return contents of specified field
  4493.         BYTE field number
  4494.         N BYTEs buffer to hold field contents (size exactly equal to field
  4495.             size)
  4496.     F5h get field table entry
  4497.         BYTE field number
  4498.         7-8 BYTEs buffer to hold field table entry
  4499.            Notes: DV < 2.26 always returns 7 bytes
  4500.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  4501.             table is using 8-byte entries and eighth byte after
  4502.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  4503.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  4504.             depending on the field table entry size
  4505.     F6h get type of a field
  4506.         BYTE field number
  4507.         BYTE type
  4508.     FCh get field table header
  4509.         6 BYTEs buffer to store header
  4510.  
  4511. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  4512.     00h allow window to be moved horizontally
  4513.     01h allow window to be moved vertically
  4514.     02h allow window to change width
  4515.     03h allow window to change height
  4516.     04h allow window to be scrolled horizontally
  4517.     05h allow window to be scrolled vertically
  4518.     06h allow "Close Window" menu selection for application
  4519.     07h allow "Hide Window" menu selection for application
  4520.     08h allow application to be suspended ("Rearrange/Freeze")
  4521.     0Eh allow "Scissors" menu
  4522.     10h allow DESQview main menu to be popped up
  4523.     11h allow "Switch Windows" menu
  4524.     12h allow "Open Window" menu
  4525.     13h allow "Quit" menu selection
  4526.     20h-33h opposite of 00h-13h, disallow specified action
  4527.     40h notify if horizontal position of window changes
  4528.     41h notify if vertical position of window changes
  4529.     42h notify if width of window changes
  4530.     43h notify if height of window changes
  4531.     44h notify if window scrolled horizontally
  4532.     45h notify if window scrolled vertically
  4533.     46h notify if window is closed--program has to clean up and exit itself
  4534.     47h notify if window is hidden
  4535.     48h notify if "?" on main menu selected
  4536.     49h notify if pointer message sent to window
  4537.     4Ah notify if window is placed in foreground
  4538.     4Bh notify if window is placed in background
  4539.     4Ch notify if video mode changes
  4540.     4Dh notify if "Scissors" menu "Cut" option selected
  4541.     4Eh notify if "Scissors" menu "Copy" option selected
  4542.     4Fh notify if "Scissors" menu "Paste" option selected
  4543.     50h notify if DESQview main menu about to pop up
  4544.     51h notify if DESQview main menu popped down
  4545.     60h-71h     opposite of 40h-51h: don't notify on specified event
  4546.     84h attach window to parent task's window (both move together)
  4547.     85h detach window from parent task's window (may move independently)
  4548.     86h disable background operation for application
  4549.     87h enable running in background
  4550.     88h set minimum size of physical window
  4551.         BYTE rows
  4552.         BYTE columns
  4553.     89h set maximum size of physical window
  4554.         BYTE rows
  4555.         BYTE cols
  4556.     8Ah set primary asynchronous notification routine
  4557.         DWORD address of routine, 0000h:0000h means none (see also below)
  4558.     8Bh set async notification parameter
  4559.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  4560.     ACh (DV2.2+) perform regular select field attribute processing
  4561.     ADh (DV2.2+) protect attributes in selected field from being lost
  4562.     AEh make window default notify window for owning app (API level 2.00+)
  4563.     AFh set selected field marker character
  4564.         BYTE character to display at left edge of selected fields
  4565.     BCh set standard field processing mode
  4566.     BDh set alternate field processing mode (enables cursor pad for menus)
  4567.     BEh disables changing reverse logical attributes with ECh opcode
  4568.     BFh enables changing reverse logical attributes with ECh opcode
  4569.     C0h make current window topmost in system
  4570.     C1h force current process into foreground
  4571.     C2h make current window topmost in process
  4572.     C3h position mouse pointer relative to origin of current field
  4573.         BYTE rows below upper left corner of field
  4574.         BYTE columns to right of upper left corner of field
  4575.     C4h position mouse pointer relative to origin of given field
  4576.         BYTE field number
  4577.         BYTE rows below upper left corner of field
  4578.         BYTE columns to right of upper left corner of field
  4579.     C5h orphan current window (also hides it)
  4580.         Note: must be last in stream; all subsequent commands ignored
  4581.     C6h show all windows for this process
  4582.     C7h hide all windows for this process
  4583.     C8h suspend process and hide all its windows
  4584.     C9h force current process into background
  4585.     CAh make current window bottom-most in process
  4586.     CBh cancel current window manager operation, remove DV menu, give
  4587.         control to topmost application
  4588.     CCh orphan window and give it to the system for use as paste data
  4589.     CEh reorder windows
  4590.         DWORD pointer to null-terminated list of words
  4591.           each word is segment of object handle for a window
  4592.     FFh no operation
  4593.  
  4594. MODES 14h to 1Fh "USER STREAMS"
  4595.     normally NOPs, but may be defined by SETESC message to invoke FAR
  4596.     routines, one for each mode number
  4597.       on entry to handler,
  4598.         DS:SI -> first byte of actual stream (not header)
  4599.         CX = #bytes in stream
  4600.         ES:DI = window's handle
  4601.  
  4602. Asynchronous notification routine defined by manager stream 8Ah called with:
  4603.     ES:DI = handle of window
  4604.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  4605.        mailbox contains message indicating event
  4606.           Opcode
  4607.            40h  horizontal movement
  4608.            DWORD object handle of window
  4609.            BYTE     new row
  4610.            BYTE     new col
  4611.            41h  vertical movement
  4612.            DWORD object handle of window
  4613.            BYTE     new row
  4614.            BYTE     new col
  4615.            42h  horizontal size change
  4616.            DWORD object handle of window
  4617.            BYTE     new rows
  4618.            BYTE     new cols
  4619.            43h  vertical size change
  4620.            DWORD object handle of window
  4621.            BYTE     new rows
  4622.            BYTE     new cols
  4623.            44h  scrolled horizontally
  4624.            DWORD object handle of window
  4625.            BYTE     mouse row within window
  4626.            BYTE     mouse column within window
  4627.            BYTE     field mouse is on, 0 if none
  4628.            BYTE     amount moved: >0 right, <0 left, 0 done
  4629.            45h  scrolled vertically
  4630.            DWORD object hande of window
  4631.            BYTE     mouse row within window
  4632.            BYTE     mouse column within window
  4633.            BYTE     field mouse is on, 0 if none
  4634.            BYTE     amount moved: >0 down, <0 up, 0 done
  4635.            46h  window close request
  4636.            DWORD object handle of window
  4637.            BYTE     mouse pointer row
  4638.            BYTE     mouse pointer column
  4639.            BYTE     field mouse is on, 0 if none
  4640.            47h  application's windows hidden
  4641.            48h  Help for Program selected
  4642.            DWORD object handle of window
  4643.            BYTE     mouse pointer row
  4644.            BYTE     mouse pointer column
  4645.            BYTE     field mouse is on, 0 if none
  4646.            49h  pointer message sent to window
  4647.            DWORD pointer handle which received message
  4648.            4Ah  switched to window from another ("raise")
  4649.            4Bh  switched away from the window ("lower")
  4650.            4Ch  video mode changed
  4651.            BYTE new BIOS video mode
  4652.            4Dh  Scissors/cUt selected
  4653.            DWORD object handle of window
  4654.            BYTE     row of upper left corner
  4655.            BYTE     column of upper left corner
  4656.            BYTE     field number ul corner is in, 0=none
  4657.            DWORD handle of orphaned window created with
  4658.              copy of data from specified region
  4659.            BYTE     height of region
  4660.            BYTE     width of region
  4661.            4Eh  Scissors/Copy selected
  4662.            DWORD object handle of window
  4663.            BYTE     row of upper left corner
  4664.            BYTE     column of upper left corner
  4665.            BYTE     field number ul corner is in, 0=none
  4666.            DWORD handle of orphaned window created with
  4667.              copy of data from specified region
  4668.            BYTE     height of region
  4669.            BYTE     width of region
  4670.            4Fh  Scissors/Paste selected
  4671.            DWORD object handle of window
  4672.            BYTE     row of upper left corner
  4673.            BYTE     column of upper left corner
  4674.            BYTE     field number ul corner is in, 0=none
  4675.            DWORD handle of orphaned window with data
  4676.            BYTE     height of region
  4677.            BYTE     width of region
  4678.             Note: orphaned data window should be adopted or freed
  4679.                 when done
  4680.            50h  main menu about to pop up
  4681.            51h  main menu popped down
  4682. Return: all registers unchanged
  4683. --------Q-1512--BH06-------------------------
  4684. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  4685.     AH = 12h
  4686.     BH = 06h
  4687.     BL = object
  4688.         00h object handle in DWORD on top of stack
  4689.         mailbox, keyboard, pointer, or timer
  4690.         (DV 2.50+) window
  4691.         01h (DV 2.50+) current task's window
  4692.         04h given task's keyboard (task's handle on top of stack)
  4693.         05h current task's default keyboard
  4694.     STACK: DWORD new priority of object in task's OBJECTQ
  4695.             (new priority of task if window handle)
  4696. Notes:    initially all objects have the same default value.  Should only make
  4697.       relative adjustments to this default value.
  4698.     when changing priorities, all objects already on the objectq are
  4699.       reordered
  4700.     for window handles, only the non-blocked task(s) with the highest
  4701.       priority receive CPU time under DESQview 2.50-2.52; the default
  4702.       priority is 0Ah
  4703. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  4704. --------Q-1512--BH07-------------------------
  4705. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  4706.     AH = 12h
  4707.     BH = 07h
  4708.     BL = object
  4709.         00h object handle in DWORD on top of stack
  4710.         mailbox, keyboard, pointer, or timer
  4711.         (DV 2.50+) window
  4712.         01h (DV 2.50+) current task's window
  4713.         04h given task's keyboard (task's handle on top of stack)
  4714.         05h current task's default keyboard
  4715. Return: STACK: DWORD object priority
  4716. Note:    initially all objects have the same default value.  Should only make
  4717.       relative adjustments to this default value.
  4718. SeeAlso: AH=12h/BH=06h
  4719. --------Q-1512--BH08-------------------------
  4720. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  4721.     AH = 12h
  4722.     BH = 08h
  4723.     BL = object
  4724.         00h handle in DWORD on top of stack
  4725.         window: total character positions in window
  4726.         timer: elapsed time since timer started
  4727.         pointer: number of messages queued to pointer object
  4728.         panel: number of panels in panel file
  4729.         keyboard: number of input buffers queued
  4730.         01h total chars in current task's default window
  4731.         02h number of messages in task's mailbox (task's handle on stack)
  4732.         03h number of messages in current task's mailbox
  4733.         04h number of input buffers queued in task's kbd (handle on stack)
  4734.         05h number of input buffers queued for current task's default kbd
  4735.         06h number of objects queued in OBJECTQ (task's handle on stack)
  4736.         07h number of objects queued in current task's OBJECTQ
  4737.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  4738.         0Dh (DV 2.26+) total chars in parent task's window
  4739. Return: DWORD on top of stack is result
  4740. Note:    for panel objects, a count of zero is returned if no panel file is open
  4741.       for the object
  4742. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  4743. --------Q-1512--BH09-------------------------
  4744. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  4745.     AH = 12h
  4746.     BH = 09h
  4747.     BL = object
  4748.         00h handle in DWORD on top of stack
  4749.         window: get chars/line
  4750.         timer: get 1/100 seconds remaining before timer expires
  4751.         mailbox: (DV/X) get number of bytes queued to mailbox
  4752.         01h get number of chars/line in current task's default window
  4753.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  4754.         0Dh (DV 2.26+) get chars/line in parent task's window
  4755. Return: DWORD on top of stack is length
  4756. SeeAlso: AH=12h/BH=08h
  4757. --------Q-1512--BH0A-------------------------
  4758. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  4759.     AH = 12h
  4760.     BH = 0Ah
  4761.     BL = window to write to
  4762.         00h window handle is DWORD on top of stack
  4763.         01h current task's default window
  4764.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  4765.         0Dh (DV 2.26+) default window of parent of current task
  4766.     STACK:    DWORD count of attributes
  4767.         DWORD address of attribute string
  4768.         DWORD count of characters
  4769.         DWORD address of character string
  4770. Notes:    if one string is longer than the other, the shorter one will be reused
  4771.       until the longer one is exhausted
  4772.     the cursor is left just after the last character written
  4773. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  4774. --------Q-1512--BH0A-------------------------
  4775. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  4776.     AH = 12h
  4777.     BH = 0Ah
  4778.     BL = mailbox to write to
  4779.         00h handle is DWORD on top of stack
  4780.         02h default mailbox of task whose handle is on top of stack
  4781.         03h current task's default mailbox
  4782.     STACK:    DWORD    status (low byte)
  4783.         DWORD    length of message
  4784.         DWORD    address of message
  4785. Notes:    the message is copied into either system or common memory
  4786.     insufficient memory normally causes the process to be aborted; under
  4787.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  4788. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  4789. --------Q-1512--BH0A-------------------------
  4790. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  4791.     AH = 12h
  4792.     BH = 0Ah
  4793.     BL = object
  4794.         00h handle is DWORD on top of stack
  4795.         timer: start timer for specified interval
  4796.         pointer: set control flags
  4797.         keyboard: set control flags
  4798.         04h set control flags on KEYBOARD object (handle on top of stack)
  4799.         05h set control flags on task's default KEYBOARD object
  4800.     STACK: (if timer)   DWORD duration in 1/100 seconds
  4801.            (otherwise)  DWORD bits to set
  4802. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  4803.  
  4804. For keyboard objects, the bits have the following significance:
  4805.     bit 15 reserved, can't be set
  4806.     bit 14 unused
  4807.     bit 13 reserved, can't be set
  4808.     bit 12-6 unused
  4809.     bit 5  (DV 2.2+) exclusive input
  4810.     bit 4  filter all keys (used with handler established by SETESC)
  4811.         if 0, only keys that would normally be displayed are filtered
  4812.     bit 3  program continues executing while input in progress
  4813.     bit 2  insert mode active for field mode
  4814.     bit 1  hardware cursor displayed when task is hardware cursor owner
  4815.         must be set if keyboard in field mode and field table includes
  4816.         input fields
  4817.     bit 0  keyboard is in field mode rather than keystroke mode
  4818.  
  4819. For pointer objects, the bits have the following significance:
  4820.     bit 15 reserved, can't be set
  4821.     bit 14-8 unused
  4822.     bit 7  mouse pointer is hidden while in window
  4823.     bit 6  get messages even if window not topmost
  4824.     bit 5  get messages even if window not foreground
  4825.     bit 4  multiple clicks separated by less than 1/3 second are counted
  4826.         and returned in a single message
  4827.     bit 3  pointer position is relative to screen origin, not window origin
  4828.     bit 2  send message on button release as well as button press
  4829.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  4830.         pointer leaves the window
  4831.     bit 0  send message only on button activity, not movement
  4832.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  4833. --------Q-1512--BH0B-------------------------
  4834. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  4835.     AH = 12h
  4836.     BH = 0Bh
  4837.     BL = window to write attributes to
  4838.         00h handle is DWORD on top of stack
  4839.         01h current task's default window
  4840.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  4841.         0Dh (DV 2.26+) default window of parent of current task
  4842.     STACK:    DWORD number of attributes to write
  4843.         DWORD address of attributes
  4844. Note:    the attributes are written starting at the current cursor position; the
  4845.       cursor is left just after the last position written
  4846. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  4847. --------Q-1512--BH0B-------------------------
  4848. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  4849.     AH = 12h
  4850.     BH = 0Bh
  4851.     BL = mailbox to write to
  4852.         00h handle is DWORD on top of stack
  4853.         02h default mailbox of task whose handle is on top of stack
  4854.         03h current task's default mailbox
  4855.     STACK:    DWORD    status (low byte)
  4856.         DWORD    length of message
  4857.         DWORD    address of message
  4858. Notes:    only a pointer to the message is stored, but the write may still fail
  4859.       due to insufficient memory
  4860.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  4861. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  4862. --------Q-1512--BH0B-------------------------
  4863. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  4864.     AH = 12h
  4865.     BH = 0Bh
  4866.     BL = OBJECTQ from which to remove all copies of a particular object
  4867.         06h OBJECTQ of task whose handle is on top of stack
  4868.         07h task's default OBJECTQ
  4869.     STACK:    DWORD    handle of object to remove
  4870. Note:    should be sent whenever an object is erased or closed
  4871. --------Q-1512--BH0B-------------------------
  4872. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  4873.     AH = 12h
  4874.     BH = 0Bh
  4875.     BL = object
  4876.         00h handle is DWORD on top of stack
  4877.         pointer: reset control flags
  4878.         keyboard: reset control flags
  4879.         04h clear control flags on KEYBOARD object (handle on top of stack)
  4880.         05h clear control flags on task's default KEYBOARD object
  4881.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  4882. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  4883. --------Q-1512--BH0C-------------------------
  4884. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  4885.     AH = 12h
  4886.     BH = 0Ch
  4887.     BL = object
  4888.         00h handle is DWORD on top of stack
  4889.         window:      fill with given character from scroll origin to end
  4890.         keyboard: attach to a window
  4891.         timer:      open
  4892.         pointer:  start taking input for window
  4893.         panel:      associate with a panel file
  4894.         01h fill task's default window with given char from scrl org to end
  4895.         02h open given task's mailbox for input (task's handle on stack)
  4896.         03h open current task's mailbox
  4897.         04h attach a KEYBOARD to a window (handle on top of stack)
  4898.         05h attach task's default KEYBOARD to a window
  4899.         06h open a task's OBJECTQ (task's handle on top of stack)
  4900.         07h open current task's OBJECTQ
  4901.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  4902.         0Dh (DV 2.26+) fill default window of parent of current task
  4903.      STACK: (if window)   DWORD character to fill with
  4904.         (if keyboard) DWORD handle of window to attach to
  4905.         (if pointer)  DWORD handle of window to attach to
  4906.         (if panel)    DWORD length of filename or resident panel
  4907.                   DWORD address of filename or resident panel
  4908.         (otherwise)   nothing
  4909. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  4910.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  4911.       the panel file
  4912.     result code of open may be retrieved with STATUS message
  4913.     logical cursor is left at scroll origin after filling window
  4914.     the task opening a mailbox becomes its owner, and the only task allowed
  4915.       to read the mailbox
  4916.     messages are only sent to a pointer object when the mouse is positioned
  4917.       in the window to which the pointer has been attached
  4918.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  4919.       messages automatically open the timer
  4920. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  4921. --------Q-1512--BH0D-------------------------
  4922. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  4923.     AH = 12h
  4924.     BH = 0Dh
  4925.     BL = object
  4926.         00h handle is DWORD on top of stack
  4927.         timer:      close
  4928.         keyboard: detach from window and discard queued input
  4929.         pointer:  stop taking input
  4930.         panel:      close
  4931.         mailbox:  close, unlock, and discard any pending messages
  4932.         02h close given task's mailbox (task's handle on top of stack)
  4933.         03h close task's default mailbox
  4934.         04h close KEYBOARD object (handle on top of stack)
  4935.         05h close task's default KEYBOARD
  4936.         06h close given task's OBJECTQ (task's handle on top of stack)
  4937.         07h close current task's OBJECTQ
  4938. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  4939.       ERASE message (AH=12h/BH=0Eh)
  4940.     when a panel object is closed, the panel file and any panels currently
  4941.       in use are freed; window and keyboard objects created by APPLY are
  4942.       not affected, but field mode input ceases
  4943.     open but idle timer objects consume a small amount of CPU time
  4944. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  4945. --------Q-1512--BH0E-------------------------
  4946. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  4947.     AH = 12h
  4948.     BH = 0Eh
  4949.     BL = object
  4950.         00h handle is DWORD on top of stack
  4951.         window:      clear from scroll origin to end of window
  4952.         keyboard: discard input
  4953.         timer:      cancel current interval
  4954.         pointer:  discard all pending messages
  4955.         mailbox:  discard all pending messages
  4956.         01h clear task's default window from scroll origin to end
  4957.         02h discard all queued messages in mailbox (handle on top of stack)
  4958.         03h discard all queued messages in current task's default mailbox
  4959.         04h discard all input queued to KEYBOARD (handle on top of stack)
  4960.         05h discard all input queued to task's default KEYBOARD
  4961.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  4962.         07h remove all objects from current task's OBJECTQ
  4963.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  4964.         0Dh (DV 2.26+) clear default window of parent of current task
  4965. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  4966. SeeAlso: AH=12h/BH=02h
  4967. --------Q-1512--BH0F-------------------------
  4968. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  4969.     AH = 12h
  4970.     BH = 0Fh
  4971.     BL = object
  4972.         00h handle is DWORD on top of stack
  4973.         timer:     is it running?
  4974.         pointer: return status of last message
  4975.         panel:     verify success of last OPEN or APPLY
  4976.         02h return status of last msg READ from mailbox (handle on stack)
  4977.         03h return status of last msg READ from task's default mailbox
  4978.         04h get stat of last msg from task's KEYBOARD (task handle on stk)
  4979.         05h get status of last msg from task's default KEYBOARD
  4980.         06h return whether OBJECTQ is open or not (handle on top of stack)
  4981.         07h return whether task's default OBJECTQ is open or not
  4982. Return: DWORD on top of stack is status
  4983. Notes:    if object is a panel object, the status indicates the error code:
  4984.       00h successful
  4985.       14h panel name not in panel directory
  4986.       15h not enough memory to apply panel
  4987.       16h invalid panel format
  4988.       17h panel file already open
  4989.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  4990.       95h not enough memory to open panel file     > that the panel was
  4991.       98h null panel file name            /  not opened
  4992.     if object is a timer, the status is:
  4993.       00000000h open but not running
  4994.       40000000h open and running
  4995.       80000000h closed
  4996.     if object is an OBJECTQ, the status is:
  4997.       00000000h open
  4998.       80000000h closed
  4999.     if object is a keyboard in keystroke mode, the status is the extended
  5000.       character code (scan code) of the last keystroke
  5001.     if object is a keyboard in field mode, the status indicates the reason
  5002.       for the last return from the field manager
  5003.       00h Enter key pressed
  5004.       01h Button 1 or keystroke selection
  5005.       02h Button 2
  5006.       03h validation
  5007.       04h auto Enter on field
  5008.       1Bh Escape pressed
  5009.       46h ^Break pressed
  5010.       other: extended code for key terminating input
  5011.     the status of mailbox messages sent by the window manager is always 80h
  5012.     the status of a pointer message is the same as the status field in the
  5013.       message
  5014. SeeAlso: AH=12h/BH=04h"READ"
  5015. --------Q-1512--BH10-------------------------
  5016. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  5017.     AH = 12h
  5018.     BH = 10h
  5019.     BL = object
  5020.         00h handle is DWORD on top of stack
  5021.         window: return TRUE if logical cursor past end of window
  5022.         mailbox: ???
  5023.         01h returns TRUE if logical cursor past end of task's def window
  5024.         02h return ??? for task's mailbox (task's handle on top of stack)
  5025.         03h return ??? for current task's mailbox
  5026.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  5027.         0Dh (DV 2.26+) check log cursor of window of parent task
  5028. Return: DWORD on top of stack is status
  5029. --------Q-1512--BH11-------------------------
  5030. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  5031.     AH = 12h
  5032.     BH = 11h
  5033.     BL = window for which to move cursor
  5034.         00h window's handle is DWORD on top of stack
  5035.         01h task's default window
  5036.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  5037.         0Dh (DV 2.26+) default window of parent of current task
  5038.     STACK: DWORD column
  5039.            DWORD row
  5040. --------Q-1512--BH11-------------------------
  5041. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  5042.     AH = 12h
  5043.     BH = 11h
  5044.     BL = mailbox to name
  5045.         00h DWORD on top of stack is mailbox handle
  5046.         02h use given task's mailbox (task's handle on top of stack)
  5047.         03h use current task's default mailbox
  5048.     STACK: DWORD length of name
  5049.            DWORD address of name
  5050. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  5051. --------Q-1512--BX1100-----------------------
  5052. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  5053.     AH = 12h
  5054.     BX = 1100h
  5055.     STACK: DWORD object handle for pointer object
  5056.            DWORD number of colums to scale pointer position to
  5057.            DWORD number of rows to scale pointer position to
  5058. SeeAlso: AH=12h/BX=1200h
  5059. --------Q-1512--BH12-------------------------
  5060. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  5061.     AH = 12h
  5062.     BH = 12h
  5063.     BL = window to read from
  5064.         00h handle is DWORD on top of stack
  5065.         01h read next N chars or attributes on task's default window
  5066.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  5067.         0Dh (DV 2.26+) read default window of parent of current task
  5068.     STACK: DWORD count
  5069. Return: STACK: DWORD number of bytes actually read
  5070.            DWORD address of buffer containing data
  5071. Notes:    reading starts at the current logical cursor position; the cursor is
  5072.       updated to point at the character following the last one read
  5073.     any translucent blanks (FFh) which are visible on screen are changed
  5074.       to the character which is seen through them
  5075.     the string produced by the read is placed in an input buffer which may
  5076.       be reused by the next READ or READN of a window
  5077.     window stream opcodes D8h and D9h determine whether the read returns
  5078.       characters or attributes
  5079. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  5080. --------Q-1512--BH12-------------------------
  5081. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  5082.     AH = 12h
  5083.     BH = 12h
  5084.     BL = mailbox for which to retrieve name
  5085.         00h DWORD on top of stack is mailbox handle
  5086.         02h use given task's mailbox (task's handle on top of stack)
  5087.         03h use current task's default mailbox
  5088.     STACK: DWORD length of buffer for name
  5089.            DWORD pointer to buffer
  5090. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  5091. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  5092. Note:    the returned name is not NUL-terminated
  5093. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  5094. --------Q-1512--BX1200-----------------------
  5095. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  5096.     AH = 12h
  5097.     BX = 1200h
  5098.     STACK: DWORD object handle for pointer
  5099. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  5100.            DWORD pointer pos scaled as if window were this many rows high
  5101. SeeAlso: AH=12h/BX=1100h
  5102. --------Q-1512--BH13-------------------------
  5103. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  5104.     AH = 12h
  5105.     BH = 13h
  5106.     BL = window object
  5107.         00h DWORD on top of stack is handle for window to redraw
  5108.         01h redraw task's default window
  5109.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  5110.         0Dh (DV 2.26+) redraw default window of parent of current task
  5111. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  5112. --------Q-1512--BH13-------------------------
  5113. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  5114.     AH = 12h
  5115.     BH = 13h
  5116.     BL = mailbox from which to read
  5117.         00h DWORD on top of stack is mailbox handle
  5118.         02h use given task's mailbox (task's handle on top of stack)
  5119.         03h use current task's default mailbox
  5120.     STACK: DWORD size of buffer in bytes
  5121.            DWORD pointer to buffer
  5122. Return: STACK: DWORD number of bytes read
  5123. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  5124. Notes:    this call blocks if no input is available, but will return less than
  5125.       the requested number of bytes if some (but insufficient) data is
  5126.       available
  5127.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  5128.       4 or 5 set, as common memory may be exhausted by that call when
  5129.       attempting to read the next message
  5130. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  5131. --------Q-1512--BX1300-----------------------
  5132. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  5133.     AH = 12h
  5134.     BX = 1300h
  5135.     STACK: DWORD object handle for pointer
  5136.            DWORD character to use for pointer
  5137. --------Q-1512--BH14-------------------------
  5138. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  5139.     AH = 12h
  5140.     BH = 14h
  5141.     BL = message modifier
  5142.         00h handle is DWORD on top of stack
  5143.         01h define user stream
  5144.         04h intercept keystrokes from KEYBOARD to window (handle on stack)
  5145.         05h intercept keystrokes from task's default KEYBOARD to a window
  5146.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  5147.                  DWORD address of FAR user stream handler
  5148.            (if keyboard) DWORD address of FAR filter function
  5149.  
  5150. The keyboard filter function is called when the keyboard is in field mode.  On
  5151. entry,
  5152.     AL = character
  5153.     AH = 00h or extended ASCII code if AL = 00h
  5154.     BL = field number
  5155.     CH = cursor column
  5156.     CL = cursor row
  5157.     DL = field type modifier (sixth item in field table entry)
  5158.     DH = seventh item in field table entry
  5159.     ES:SI = window's handle
  5160.     DS:DI -> field table entry for field containing the cursor
  5161. The filter function should return
  5162.     AH = 00h use keystroke
  5163.          01h ignore keystroke
  5164.          FFh beep and ignore keystroke
  5165. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  5166. --------Q-1512--BH14-------------------------
  5167. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  5168.     AH = 12h
  5169.     BH = 14h
  5170.     BL = object
  5171.         00h mailbox handle is DWORD on top of stack
  5172.         02h use given task's mailbox (task's handle on top of stack)
  5173.         03h use current task's default mailbox
  5174. Note:    release exclusive access by sending CLOSE message to mailbox
  5175.     access may be requested multiple times, and requires multiple CLOSEs
  5176. SeeAlso: AH=12h/BH=0Dh
  5177. --------Q-1512--BH15-------------------------
  5178. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  5179.     AH = 12h
  5180.     BH = 15h
  5181.     BL = object
  5182.         00h DWORD on top of stack
  5183.         mailbox, keyboard, or pointer only
  5184.         02h mailbox for task whose handle is on top of stack
  5185.         03h mailbox for current task
  5186.         04h keyboard for task whose handle is on top of stack
  5187.         05h keyboard for current task
  5188.     STACK: DWORD flags
  5189.         if mailbox:
  5190.             bit 0: all mail messages in common memory
  5191.             bit 1: allow write even if closed
  5192.             bit 2: don't erase messages when mailbox closed
  5193.             bit 4: (DV/X) append messages with like status and
  5194.                 sender (stream-oriented mail)
  5195.             bit 5: (DV/X) store mail in expanded memory (pool
  5196.                 grows as needed)
  5197.             bit 6: (DV/X) make mailbox into non-owned mailbox
  5198.         if keyboard:
  5199.             bit 5: exclusive input when keyboard in use for input
  5200. Return: nothing
  5201. Notes:    only available if the API level has been set to at least 2.20
  5202.     equivalent to performing SUBFROM and ADDTO calls on the object
  5203.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  5204.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  5205. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  5206. --------Q-1512--BH16-------------------------
  5207. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  5208.     AH = 12h
  5209.     BH = 16h
  5210.     BL = object
  5211.         00h DWORD on top of stack
  5212.         mailbox, keyboard, or pointer only
  5213.         02h mailbox for task whose handle is on top of stack
  5214.         03h mailbox for current task
  5215.         04h keyboard for task whose handle is on top of stack
  5216.         05h keyboard for current task
  5217. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  5218. Notes:    only available if the API level has been set to at least 2.20
  5219.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  5220.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  5221. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  5222. --------Q-1512--BH17-------------------------
  5223. INT 15 - DESQview v2.42-2.52 - BUG
  5224.     AH = 12h
  5225.     BH = 17h
  5226.     BL = object
  5227.         00h DWORD on top of stack
  5228.         mailbox, keyboard, or pointer only
  5229.         02h mailbox for task whose handle is on top of stack
  5230.         03h mailbox for current task
  5231.         04h keyboard for task whose handle is on top of stack
  5232.         05h keyboard for current task
  5233. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  5234.       keyboards, and pointers, but causes a random branch
  5235.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  5236. --------Q-1512--BH80-------------------------
  5237. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  5238.     AH = 12h
  5239.     BH = 80h
  5240. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  5241.       not pop up a "Programming Error" window, instead returning an error
  5242.       code in AL:
  5243.         00h no error
  5244.         01h invalid values
  5245.         02h alias invalid
  5246.         03h handle valid but wrong type
  5247.         04h invalid handle
  5248. SeeAlso: AH=12h/BH=00h
  5249. --------Q-1512--BH81-------------------------
  5250. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  5251.     AH = 12h
  5252.     BH = 81h
  5253. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  5254.       not pop up a "Programming Error" window, instead returning an error
  5255.       code in AL (see AH=12h/BH=80h)
  5256. SeeAlso: AH=12h/BH=01h
  5257. --------Q-1512--BH82-------------------------
  5258. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  5259.     AH = 12h
  5260.     BH = 82h
  5261. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  5262.       not pop up a "Programming Error" window, instead returning an error
  5263.       code in AL (see AH=12h/BH=80h)
  5264. SeeAlso: AH=12h/BH=02h
  5265. --------Q-1512--BH83-------------------------
  5266. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  5267.     AH = 12h
  5268.     BH = 83h
  5269. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  5270.       not pop up a "Programming Error" window, instead returning an error
  5271.       code in AL (see AH=12h/BH=80h)
  5272. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  5273. --------Q-1512--BH84-------------------------
  5274. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  5275.     AH = 12h
  5276.     BH = 84h
  5277. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  5278.       not pop up a "Programming Error" window, instead returning an error
  5279.       code in AL (see AH=12h/BH=80h)
  5280. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  5281. --------Q-1512--BH85-------------------------
  5282. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  5283.     AH = 12h
  5284.     BH = 85h
  5285. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  5286.       not pop up a "Programming Error" window, instead returning an error
  5287.       code in AL (see AH=12h/BH=80h)
  5288. SeeAlso: AH=12h/BH=05h
  5289. --------Q-1512--BH86-------------------------
  5290. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  5291.     AH = 12h
  5292.     BH = 86h
  5293. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  5294.       not pop up a "Programming Error" window, instead returning an error
  5295.       code in AL (see AH=12h/BH=80h)
  5296. SeeAlso: AH=12h/BH=06h
  5297. --------Q-1512--BH87-------------------------
  5298. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  5299.     AH = 12h
  5300.     BH = 87h
  5301. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  5302.       not pop up a "Programming Error" window, instead returning an error
  5303.       code in AL (see AH=12h/BH=80h)
  5304. SeeAlso: AH=12h/BH=07h
  5305. --------Q-1512--BH88-------------------------
  5306. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  5307.     AH = 12h
  5308.     BH = 88h
  5309. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  5310.       not pop up a "Programming Error" window, instead returning an error
  5311.       code in AL (see AH=12h/BH=80h)
  5312. SeeAlso: AH=12h/BH=08h
  5313. --------Q-1512--BH89-------------------------
  5314. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  5315.     AH = 12h
  5316.     BH = 89h
  5317. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  5318.       not pop up a "Programming Error" window, instead returning an error
  5319.       code in AL (see AH=12h/BH=80h)
  5320. SeeAlso: AH=12h/BH=09h
  5321. --------Q-1512--BH8A-------------------------
  5322. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  5323.     AH = 12h
  5324.     BH = 8Ah
  5325. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  5326.       not pop up a "Programming Error" window, instead returning an error
  5327.       code in AL (see AH=12h/BH=80h)
  5328. SeeAlso: AH=12h/BH=0Ah
  5329. --------Q-1512--BH8B-------------------------
  5330. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  5331.     AH = 12h
  5332.     BH = 8Bh
  5333. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  5334.       not pop up a "Programming Error" window, instead returning an error
  5335.       code in AL (see AH=12h/BH=80h)
  5336. SeeAlso: AH=12h/BH=0Bh
  5337. --------Q-1512--BH8C-------------------------
  5338. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  5339.     AH = 12h
  5340.     BH = 8Ch
  5341. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  5342.       not pop up a "Programming Error" window, instead returning an error
  5343.       code in AL (see AH=12h/BH=80h)
  5344. SeeAlso: AH=12h/BH=0Ch
  5345. --------Q-1512--BH8D-------------------------
  5346. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  5347.     AH = 12h
  5348.     BH = 8Dh
  5349. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  5350.       not pop up a "Programming Error" window, instead returning an error
  5351.       code in AL (see AH=12h/BH=80h)
  5352. SeeAlso: AH=12h/BH=0Dh
  5353. --------Q-1512--BH8E-------------------------
  5354. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  5355.     AH = 12h
  5356.     BH = 8Eh
  5357. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  5358.       not pop up a "Programming Error" window, instead returning an error
  5359.       code in AL (see AH=12h/BH=80h)
  5360. SeeAlso: AH=12h/BH=0Eh
  5361. --------Q-1512--BH8F-------------------------
  5362. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  5363.     AH = 12h
  5364.     BH = 8Fh
  5365. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  5366.       not pop up a "Programming Error" window, instead returning an error
  5367.       code in AL (see AH=12h/BH=80h)
  5368. SeeAlso: AH=12h/BH=0Fh
  5369. --------Q-1512--BH90-------------------------
  5370. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  5371.     AH = 12h
  5372.     BH = 90h
  5373. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  5374.       not pop up a "Programming Error" window, instead returning an error
  5375.       code in AL (see AH=12h/BH=80h)
  5376. SeeAlso: AH=12h/BH=10h
  5377. --------Q-1512--BH91-------------------------
  5378. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  5379.     AH = 12h
  5380.     BH = 91h
  5381. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  5382.       not pop up a "Programming Error" window, instead returning an error
  5383.       code in AL (see AH=12h/BH=80h)
  5384. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  5385. --------Q-1512--BH92-------------------------
  5386. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  5387.     AH = 12h
  5388.     BH = 92h
  5389. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  5390.       not pop up a "Programming Error" window, instead returning an error
  5391.       code in AL (see AH=12h/BH=80h)
  5392. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  5393. --------Q-1512--BH93-------------------------
  5394. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  5395.     AH = 12h
  5396.     BH = 93h
  5397. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  5398.       not pop up a "Programming Error" window, instead returning an error
  5399.       code in AL (see AH=12h/BH=80h)
  5400. SeeAlso: AH=12h/BH=13h
  5401. --------Q-1512--BH94-------------------------
  5402. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  5403.     AH = 12h
  5404.     BH = 94h
  5405. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  5406.       not pop up a "Programming Error" window, instead returning an error
  5407.       code in AL (see AH=12h/BH=80h)
  5408. SeeAlso: AH=12h/BH=14h
  5409. --------Q-1512--BH95-------------------------
  5410. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  5411.     AH = 12h
  5412.     BH = 95h
  5413. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  5414.       not pop up a "Programming Error" window, instead returning an error
  5415.       code in AL (see AH=12h/BH=80h)
  5416. SeeAlso: AH=12h/BH=15h
  5417. --------Q-1512--BH96-------------------------
  5418. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  5419.     AH = 12h
  5420.     BH = 96h
  5421. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  5422.       not pop up a "Programming Error" window, instead returning an error
  5423.       code in AL (see AH=12h/BH=80h)
  5424. SeeAlso: AH=12h/BH=16h
  5425. --------T-1513-------------------------------
  5426. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  5427.     AH = 13h
  5428.     STACK:    WORD    process ID
  5429. Return: AX = status (SYS_OK or SYS_ERROR)
  5430. SeeAlso: AH=12h"VMiX"
  5431. --------T-1513-------------------------------
  5432. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  5433.     AH = 13h
  5434. Return: BX:AX -> task control block (see below)
  5435. SeeAlso: AH=15h"MultiDOS"
  5436.  
  5437. Format of MultiDOS Plus v4.0 task control block:
  5438. Offset    Size    Description
  5439.  00h    DWORD    pointer to next TCB
  5440.  04h  8 BYTEs    ASCIZ task name
  5441.  0Ch  2 BYTEs    ???
  5442.  0Eh    WORD    task PSP segment
  5443.  10h    WORD    abort/suspend flags
  5444.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  5445.  14h    WORD    priority level (0000h-FFFEh)
  5446.  16h    WORD    time slice counter
  5447.  18h  2 BYTEs    ???
  5448.  1Ah    WORD    suspend timer value
  5449.  1Ch    WORD    stack segment
  5450.  1Eh    WORD    stack pointer
  5451.  20h    WORD    display type
  5452.  22h    WORD    display memory
  5453.  24h  2 BYTEs    ???
  5454.  26h    WORD    termination count
  5455.  28h    WORD    equipment flag for BIO10 driver
  5456.  2Ah    BYTE    background CRT mode
  5457.  2Bh    WORD    screen width in columns
  5458.  2Dh    WORD    screen size in bytes
  5459.  2Fh    WORD    segment of physical screen memory
  5460.  31h 16 BYTEs    eight cursor positions
  5461.  41h    WORD    current cursor shape
  5462.  43h    BYTE    active display page
  5463.  44h    WORD    CRT controller I/O port base
  5464.  46h  2 BYTEs    ???
  5465.  48h    WORD    foreground task flag
  5466.  4Ah  6 BYTEs    ???
  5467.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  5468.  52h    DWORD    old INT 22
  5469.  56h    DWORD    old INT 23
  5470.  5Ah    DWORD    old INT 24
  5471.  5Eh    WORD    top of memory for task
  5472.  60h  4 BYTEs    ???
  5473.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  5474.  66h    WORD    DTA offset
  5475.  68h  4 BYTEs    ???
  5476.  6Ch    BYTE    current ANSI.SYS attribute
  5477.  6Dh    BYTE    current ANSI.SYS column
  5478.  6Eh    BYTE    current ANSI.SYS row
  5479.  6Fh    BYTE    current ANSI.SYS display state
  5480.  70h    BYTE    maximum ANSI.SYS columns
  5481.  71h    BYTE    current ANSI.SYS page
  5482.  72h    WORD    saved ANSI.SYS cursor position
  5483.  74h    BYTE    ANSI.SYS parameter buffer index
  5484.  75h    BYTE    current ANSI.SYS screen mode
  5485.  76h    BYTE    ANSI.SYS wrap flag
  5486.  77h  6 BYTEs    ANSI.SYS parameter buffer
  5487.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  5488.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  5489.  85h  3 BYTEs    ???
  5490.  88h 16 BYTEs    request header for DOS driver calls
  5491.  98h 14 BYTEs    ???
  5492.  A6h    WORD    segment of EMS map if EMS task
  5493.  A8h    WORD    flag: task makes EMS calls
  5494.  AAh    WORD    EMS handle for task
  5495.  ACh    WORD    keyboard shift state
  5496.  AEh 12 BYTEs    ???
  5497.  BAh    WORD    TCB of parent if child task
  5498.  BCh    WORD    termination code
  5499.  BEh    WORD    COM port number
  5500.  C0h  4 BYTEs    ???
  5501.  C4h    WORD    current IRQ number
  5502.  C6h  2 BYTEs    ???
  5503.  C8h    WORD    miscellaneous flag word
  5504.  CAh  2 BYTEs    ???
  5505.  CCh    DWORD    old INT 10
  5506.  D0h    WORD    EMS alternate map set number
  5507.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  5508. --------T-1514-------------------------------
  5509. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  5510.     AH = 14h
  5511.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  5512.         WORD    bottom right corner of window (high = row, low = col)
  5513. Return: AX = status (SYS_OK)
  5514. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  5515. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  5516. --------T-1514-------------------------------
  5517. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  5518.     AH = 14h
  5519. Return: AX = current state
  5520.         0000h MultiDOS Plus command prompt is background task
  5521.         0001h command prompt is foreground task
  5522. SeeAlso: AH=0Bh"MultiDOS"
  5523. --------T-1515-------------------------------
  5524. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  5525.     AH = 15h
  5526.     STACK:    DWORD    pointer to ASCIZ banner message for top of screen
  5527. Return: AX = status (SYS_OK)
  5528. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  5529. --------T-1515-------------------------------
  5530. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  5531.     AH = 15h
  5532. Return: BX:AX -> system block (see below)
  5533. SeeAlso: AH=13h"MultiDOS"
  5534.  
  5535. Format of MultiDOS Plus 4.0 system block:
  5536. Offset    Size    Description
  5537.  00h    WORD    segment of system control block
  5538.  02h    WORD    redirection flag set by /NOREDIRECT
  5539.  04h    WORD    no-INT 10 flag set by /NO10
  5540.  06h    DWORD    old INT 10
  5541.  0Ah    DWORD    new INT 10
  5542.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  5543.  12h    DWORD    pointer to WORD with idle task TCB offset
  5544.  16h    DWORD    pointer to WORD with foreground TCB offset
  5545.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  5546.  1Eh    WORD    Task Control Block size
  5547.  20h    WORD    number of TCBs
  5548.  22h    WORD    flag: EMS present
  5549.  24h    WORD    EMS page frame base segment
  5550.  26h    WORD    16K pages in EMS page frame
  5551.  28h    WORD    base segment for conventional memory tasks
  5552.  2Ah    WORD    conventional memory size in paragraphs
  5553.  2Ch    DWORD    pointer to list of queue pointers
  5554. --------T-1516-------------------------------
  5555. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  5556.     AH = 16h
  5557.     STACK:    DWORD    pointer to I/O Request Packet
  5558.         WORD    top left corner of window (high byte = row, low = col)
  5559.         WORD    bottom right corner of window (high = row, low = col)
  5560. Return: AX = status (SYS_OK or SYS_ERROR)
  5561. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  5562. --------T-1516-------------------------------
  5563. INT 15 - MultiDOS Plus - INITIALIZATION
  5564.     AH = 16h
  5565. Note:    used internally during initialization; any other calls will cause
  5566.       unpredicatable results
  5567. --------T-1517-------------------------------
  5568. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  5569.     AH = 17h
  5570. Return: AH = foreground color
  5571.     AL = background color
  5572. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  5573. --------T-1517-------------------------------
  5574. INT 15 - MultiDOS Plus - MAP IRQ
  5575.     AH = 17h
  5576.     AL = IRQ to map (01h-0Fh)
  5577.     BX = offset of task control block (see AH=13h) to associate with IRQ
  5578. Return: AX = status
  5579.         0000h successful
  5580.         other invalid IRQ
  5581. Note:    the EMS map of the specified TCB is associated with the given interrupt
  5582. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  5583. --------T-1518-------------------------------
  5584. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  5585.     AH = 18h
  5586.     STACK:    WORD    new background/foreground colors
  5587.             bits 3-0: foreground
  5588.             bits 7-4: background
  5589.             bits 15-8: unused
  5590. Return: AX = color
  5591. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  5592. --------T-1518-------------------------------
  5593. INT 15 - MultiDOS Plus - UNMAP IRQ
  5594.     AH = 18h
  5595.     AL = IRQ to unmap (01h-0Fh)
  5596. Return: AX = status
  5597.         0000h successful
  5598.         0001h invalid IRQ
  5599. Note:    results are unpredictable if the IRQ has not been mapped
  5600. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  5601. --------T-1519-------------------------------
  5602. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  5603.     AH = 19h
  5604.     STACK:    WORD    new background/foreground colors
  5605.             bits 3-0: foreground
  5606.             bits 7-4: background
  5607.             bits 15-8: unused
  5608. Return: AX = color
  5609. SeeAlso: AH=18h"VMiX"
  5610. --------T-1519-------------------------------
  5611. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  5612.     AH = 19h
  5613. Return: AX destroyed
  5614. Note:    for MultiDOS internal use only
  5615. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  5616. --------T-151A-------------------------------
  5617. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  5618.     AH = 1Ah
  5619.     STACK:    WORD    interrupt number
  5620.         DWORD    pointer to register structure
  5621. Return: AX = returned flags
  5622. --------T-151A-------------------------------
  5623. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  5624.     AH = 1Ah
  5625.     DS:SI -> 8-byte name
  5626. Return: AL = status
  5627.         00h successful
  5628.         AH = semaphore number (20h-3Fh)
  5629.         04h out of string space
  5630. Notes:    all eight bytes of the name are significant
  5631.     if the name does not already exist, it is added to the name table and
  5632.       associated with a free semaphore number
  5633.     names cannot be destroyed
  5634. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  5635. --------T-151B-------------------------------
  5636. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  5637.     AH = 1Bh
  5638.     STACK:    DWORD    source address
  5639.         DWORD    destination address
  5640.         WORD    number of words to move
  5641. Return: nothing
  5642. --------T-151B-------------------------------
  5643. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  5644.     AH = 1Bh
  5645.     DS:SI -> 8-byte name
  5646. Return: AH = status
  5647.         00h successful
  5648.         02h invalid semaphore number
  5649.         03h caller already owns semaphore
  5650.         04h out of string space
  5651. Notes:    (see AH=01h"MultiDOS")
  5652.     equivalent to AH=1Ah followed by AH=01h
  5653. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  5654. --------T-151C-------------------------------
  5655. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  5656.     AH = 1Ch
  5657.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  5658.         DWORD    pointer to object bitmap
  5659.         WORD    object width in pixels
  5660.         WORD    object height in pixels
  5661. Return: nothing
  5662. SeeAlso: AH=1Dh"VMiX"
  5663. --------T-151C-------------------------------
  5664. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  5665.     AH = 1Ch
  5666.     DS:SI -> 8-byte name
  5667. Return: AH = status
  5668.         00h successful
  5669.         01h not semaphore owner
  5670.         02h invalid semaphore number
  5671.         04h out of string space
  5672. Notes:    (see AH=02h"MultiDOS")
  5673.     equivalent to AH=1Ah followed by AH=02h
  5674. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  5675. --------T-151D-------------------------------
  5676. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  5677.     AH = 1Dh
  5678. Return: AX = current font number (00h-03h)
  5679. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  5680. --------T-151D-------------------------------
  5681. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  5682.     AH = 1Dh
  5683.     DS:SI -> 8-byte name
  5684. Return: AH = status
  5685.         00h semaphore not in use
  5686.         01h semaphore owned by another task
  5687.         02h invalid semaphore number
  5688.         03h caller owns semaphore
  5689.         04h out of string space
  5690. Notes:    (see AH=10h"MultiDOS")
  5691.     equivalent to AH=1Ah followed by AH=10h
  5692. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  5693. --------T-151E-------------------------------
  5694. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  5695.     AH = 1Eh
  5696.     STACK: WORD new font number (00h-03h)
  5697. Return: AX = current font number (00h-03h)
  5698. SeeAlso: AH=1Dh"VMiX"
  5699. --------T-151E00-----------------------------
  5700. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  5701.     AX = 1E00h
  5702.     DX = event/trigger number (00h-3Fh)
  5703. Return: AH = status
  5704.         00h successful
  5705. SeeAlso: AX=1E01h,AX=1E02h
  5706. --------T-151E01-----------------------------
  5707. INT 15 - MultiDOS Plus - TRIGGER EVENT
  5708.     AX = 1E01h
  5709.     DX = event/trigger number (00h-3Fh)
  5710. Return: AH = status
  5711.         00h successful
  5712.         01h invalid event/trigger number
  5713. Notes:    schedules any task waiting for event; if no task is waiting, the event
  5714.       counter is incremented (and will roll over if it was 65535)
  5715.     may be invoked by interrupt handler
  5716. SeeAlso: AX=1E00h,AX=1E02h
  5717. --------T-151E02-----------------------------
  5718. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  5719.     AX = 1E02h
  5720.     DX = event/trigger number (00h-3Fh)
  5721. Return: AH = status
  5722.         00h successful
  5723.         01h invalid event/trigger number
  5724. Note:    if the event counter is zero, the task is suspended until the event is
  5725.       triggered with AX=1E01h; else, the counter is decremented and the
  5726.       call returns immediately
  5727. SeeAlso: AX=1E00h,AX=1E01h
  5728. --------T-151E08-----------------------------
  5729. INT 15 - MultiDOS Plus 4.01 - SET CONTEXT-SWITCH FUNCTIONS
  5730.     AX = 1E08h
  5731.     DX:BX -> context save handler
  5732.     DX:CX -> context restore handler
  5733. Note:    handlers may be removed by setting addresses to 0000h:0000h
  5734.  
  5735. Handlers are called with:
  5736.     ES:BX -> task's TCB
  5737. Return: all registers preserved
  5738. --------T-151F-------------------------------
  5739. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  5740.     AH = 1Fh
  5741.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  5742.         WORD    bottom right corner of window
  5743. Return: AX = status (SYS_OK)
  5744. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  5745. --------T-151F-------------------------------
  5746. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  5747.     AH = 1Fh
  5748. Return: BX = first segment of conventional memory
  5749.     DX = first segment of EMS swap frame into which MultiDOS will load
  5750.         programs
  5751. --------T-1520-------------------------------
  5752. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  5753.     AH = 20h
  5754. Return: AX = current state
  5755.         0000h multitasking enabled
  5756.         other TCB of task that disabled multitasking
  5757. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  5758. --------c-152000-----------------------------
  5759. INT 15 U - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  5760.     AX = 2000h
  5761. Desc:    stop setting user flag on entry to PRINT critical region
  5762. Note:    also supported by PC Network v1.00 RECEIVER.COM
  5763. SeeAlso: AX=2001h
  5764. --------c-152001-----------------------------
  5765. INT 15 U - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  5766.     AX = 2001h
  5767.     ES:BX -> byte which is to be incremented while in a DOS call
  5768. Desc:    specify a user flag which PRINT should set to let an interested
  5769.       application know it is in a critical region
  5770. Note:    also supported by PC Network v1.00 RECEIVER.COM
  5771. SeeAlso: AX=2000h
  5772. --------O-152010-----------------------------
  5773. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  5774.     AX = 2010h
  5775.     ???
  5776. Return: ???
  5777. SeeAlso: AX=2011h
  5778. --------O-152011-----------------------------
  5779. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  5780.     AX = 2011h
  5781.     ???
  5782. Return: ???
  5783. SeeAlso: AX=2010h
  5784. --------B-1521-------------------------------
  5785. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  5786.     AH = 21h
  5787.     AL = subfunction
  5788.         00h read POST log
  5789.         01h write POST log
  5790.         BH = device ID
  5791.         BL = error code
  5792. Return: CF set on error
  5793.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  5794.     if function 00h:
  5795.        BX = number of error codes stored
  5796.        ES:DI -> error log
  5797. Note:    the log is a series of words, the first byte of which identifies the
  5798.       error code and the second the device.
  5799. --------B-1522-------------------------------
  5800. INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
  5801.     AH = 22h
  5802. Return: CF set on error
  5803.         AH = status (86h if function not supported)
  5804.     CF clear on success
  5805.         AH = 00h
  5806.         ES:BX -> ROM BASIC
  5807. Note:    if this function is not supported, ROM BASIC is at F600h:0000h
  5808. SeeAlso: INT 86"BASIC",INT F0"BASIC"
  5809. --------b-152400-----------------------------
  5810. INT 15 - SYSTEM - later PS/2s - DISABLE A20 GATE
  5811.     AX = 2400h
  5812. Return: CF clear if successful
  5813.         AH = 00h
  5814.     CF set on error
  5815.         AH = status
  5816.         01h keyboard controller is in secure mode
  5817.         86h function not supported
  5818. Note:    also supported by Qualitas 386MAX v6.01+
  5819. SeeAlso: AX=2401h,AX=2402h,AX=2403h
  5820. --------b-152401-----------------------------
  5821. INT 15 - SYSTEM - later PS/2s - ENABLE A20 GATE
  5822.     AX = 2401h
  5823. Return: CF clear if successful
  5824.         AH = 00h
  5825.     CF set on error
  5826.         AH = status
  5827.         01h keyboard controller is in secure mode
  5828.         86h function not supported
  5829. Note:    also supported by Qualitas 386MAX v6.01+
  5830. SeeAlso: AX=2400h,AX=2402h
  5831. --------b-152402-----------------------------
  5832. INT 15 - SYSTEM - later PS/2s - GET A20 GATE STATUS
  5833.     AX = 2402h
  5834. Return: CF clear if successful
  5835.         AH = 00h
  5836.         AL = current state (00h disabled, 01h enabled)
  5837.     CF set on error
  5838.         AH = status
  5839.         01h keyboard controller is in secure mode
  5840.         86h function not supported
  5841. Note:    also supported by Qualitas 386MAX v6.01+
  5842. SeeAlso: AX=2400h,AX=2401h
  5843. --------b-152403-----------------------------
  5844. INT 15 - SYSTEM - later PS/2s - QUERY A20 GATE SUPPORT
  5845.     AX = 2403h
  5846. Return: CF clear if successful
  5847.         AH = 00h
  5848.         BX = status of A20 gate support
  5849.         bit 0: supported with bit 1 of I/O port 92h
  5850.         bit 1: supported on keyboard controller
  5851.         bit 15: additional data is available (location not yet defined)
  5852.     CF set on error
  5853.         AH = status
  5854.         01h keyboard controller is in secure mode
  5855.         86h function not supported
  5856. Note:    also supported by Qualitas 386MAX v6.01+
  5857. SeeAlso: AX=2402h
  5858. --------B-1540-------------------------------
  5859. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  5860.     AH = 40h
  5861.     AL = subfunction
  5862.         00h get system profile in CX and BX
  5863.         01h set system profile from CX and BX
  5864.         02h get internal modem profile in BX
  5865.         03h set internal modem profile from BX
  5866. Return: CF clear if successful
  5867.         AH = 00h
  5868.     CF set on error
  5869.         AH = status (80h = profile execution failed)
  5870. --------V-154000-----------------------------
  5871. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  5872.     AX = 4000h
  5873. Return: AX = 4000h
  5874.     CL = timeout in minutes, 00h if disabled
  5875. SeeAlso: AX=4001h,AX=4600h
  5876. --------V-154001-----------------------------
  5877. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  5878.     AX = 4001h
  5879.     CL = timeout in minutes, 00h to disable
  5880. Return: AL = status
  5881.         00h timeout modified
  5882.         01h timeout cannot be modified
  5883.         40h timeout cannot be modified
  5884.     CL = timeout in minutes, 00h if disabled
  5885. SeeAlso: AX=4000h,AX=4601h
  5886. --------B-1541-------------------------------
  5887. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
  5888.     AH = 41h
  5889.     AL = condition type
  5890.         bits 0-2: condition to wait for
  5891.              0 any external event
  5892.              1 compare and return if equal
  5893.              2 compare and return if not equal
  5894.              3 test and return if not zero
  5895.              4 test and return if zero
  5896.         bit 3:    reserved
  5897.         bit 4:    1=port address, 0=user byte
  5898.         bits 5-7: reserved
  5899.     BH = condition compare or mask value
  5900.     BL = timeout value times 55 milliseconds
  5901.         00h means no timeout
  5902.     DX = I/O port address if AL bit 4 set
  5903.     ES:DI -> user byte if AL bit 4 clear
  5904. Note:    call AH=C0h and examine bit 3 of feature byte 1 to determine whether
  5905.       this function is supported
  5906. SeeAlso: AH=83h,AH=86h,AH=C0h
  5907. --------B-1542-------------------------------
  5908. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  5909.     AH = 42h
  5910.     AL = suspend type
  5911.         00h to use system profile
  5912.         01h to force suspend regardless of system profile
  5913. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  5914.       power-up, execution will resume following the instruction calling
  5915.       this function
  5916. SeeAlso: AH=44h
  5917. --------b-154280-----------------------------
  5918. INT 15 - Compaq SLT/286 - ENTER STANDBY
  5919.     AX = 4280h
  5920. Return: AH = 42h
  5921.     CF clear if successful
  5922.     CF set if unable to enter standby
  5923. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  5924. --------B-1543-------------------------------
  5925. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  5926.     AH = 43h
  5927. Return: AL = status bits (see below)
  5928.  
  5929. Bitfields for Convertible system status:
  5930.  bit 0    LCD detached
  5931.  bit 1    reserved
  5932.  bit 2    RS232/parallel adapter powered on
  5933.  bit 3    internal modem powered on
  5934.  bit 4    power activated by alarm
  5935.  bit 5    standby power lost
  5936.  bit 6    external power in use
  5937.  bit 7    power low
  5938. --------B-1544-------------------------------
  5939. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  5940.     AH = 44h
  5941.     AL = new modem power state (00h power off, 01h power on)
  5942. SeeAlso: AH=42h
  5943. --------b-1544C0-----------------------------
  5944. INT 15 - Olivetti Quaderno - INITIALIZE DIGITAL SIGNAL PROCESSING???
  5945.     AX = 44C0h
  5946.     ES:DI -> new DSP procedure (exchanged with CMOS[28h])
  5947.     ES:SI -> ??? buffer
  5948. Return: ES:DI -> old DSP procedure
  5949.     ES:SI buffer filled with ten bytes from CMOS (addresses 14h-1Ch)
  5950.       followed by 00h (addresses 15h-1Ch copied only if less than 21h)
  5951. Note:    this function is also supported by XBIOS.COM
  5952. SeeAlso: AX=44C9h
  5953. --------b-1544C1-----------------------------
  5954. INT 15 - Olivetti Quaderno - ???
  5955.     AX = 44C1h
  5956.     ???
  5957. Return: ???
  5958. Note:    this function is also supported by XBIOS.COM
  5959. SeeAlso: AX=44C9h
  5960. --------b-1544C2-----------------------------
  5961. INT 15 - Olivetti Quaderno - ???
  5962.     AX = 44C2h
  5963.     DL = byte to be written to I/O port 350h
  5964. Note:    this function is also supported by XBIOS.COM
  5965. SeeAlso: AX=44C3h,AX=44C9h
  5966. --------b-1544C3-----------------------------
  5967. INT 15 - Olivetti Quaderno - GET ???
  5968.     AX = 44C3h
  5969. Return: DH = bitfields
  5970.         bits 0,1: "tres complique"
  5971.         bits 2-4: zero
  5972.         bits 5-7: bits 5-7 read from I/O port 351h
  5973.     DL = value read from I/O port 350h
  5974. Note:    this function is also supported by XBIOS.COM
  5975. SeeAlso: AX=44C2h,AX=44C9h
  5976. --------b-1544C4-----------------------------
  5977. INT 15 - Olivetti Quaderno - ???
  5978.     AX = 44C4h and 44C5h
  5979.     ???
  5980. Return: ???
  5981. Note:    this function is also supported by XBIOS.COM
  5982. SeeAlso: AX=44C9h
  5983. --------b-1544C6-----------------------------
  5984. INT 15 - Olivetti Quaderno - READ LCD
  5985.     AX = 44C6h
  5986. Return: DX = FFFFh clock is displayed on LCD display
  5987.     DX = other: hex number displayed in first four positions of display
  5988.     BH = left alphanumeric character on display (see below)
  5989.     BL = right alphanumeric character on display (see below)
  5990.     CL = flags
  5991.         bit 0: right colon on
  5992.         bit 1: left colon on
  5993.         bits 2-7 unused    
  5994. Notes:    the LCD display has the format HH:HH:AA, where H is a hex digit and A
  5995.       is an alphanumeric character
  5996.     this function is also supported by XBIOS.COM
  5997. SeeAlso: AX=44C7h,AX=44C9h
  5998.  
  5999. Values for alphanumeric characters:
  6000.  00h-0Fh hex digit
  6001.  2Bh    "+"
  6002.  2Dh    "-"
  6003.  30h-39h "0" to "9"
  6004.  41h-5Ah "A" to "Z"
  6005.  61h-6Ah "a" to "z"
  6006.  else    blank
  6007. --------b-1544C7-----------------------------
  6008. INT 15 - Olivetti Quaderno - WRITE LCD
  6009.     AX = 44C7h
  6010.     DX = hex display
  6011.         FFFFh display clock and "HI", "Md", or "Lo"
  6012.         BH,BL,CL unused
  6013.         other: display specified hex number in first four positions
  6014.         BH = left alphanumeric character on display (see AX=44C6h)
  6015.         BL = right alphanumeric character on display (see AX=44C6h)
  6016.         CL = flags
  6017.             bit 0: right colon on
  6018.             bit 1: left colon on
  6019.             bits 2-7 unused
  6020. Note:    this function is also supported by XBIOS.COM
  6021. SeeAlso: AX=44C6h
  6022. --------b-1544C8-----------------------------
  6023. INT 15 - Olivetti Quaderno - ???
  6024.     AX = 44C8h
  6025.     CL = ??? (00h,02h,21h)
  6026.     CH = ???
  6027.     ???
  6028. Return: ???
  6029. Note:    this function is also supported by XBIOS.COM
  6030. SeeAlso: AX=44C9h
  6031. --------b-1544C9-----------------------------
  6032. INT 15 - Olivetti Quaderno - GET XBIOS VERSION
  6033.     AX = 44C9h
  6034. Return: AL = major version
  6035.     AH = minor version
  6036. Note:    this function is also supported by XBIOS.COM
  6037. --------b-154600-----------------------------
  6038. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  6039.     AX = 4600h
  6040. Return: AH = modem configuration information
  6041.         bit 0 powerup state (0 off, 1 on)
  6042.         bit    1 modem installed
  6043.         bit    2 IRQ line assignment (0 IRQ 4, 1 IRQ 3)
  6044.         bit 3 COM port assignment (0 = COM 2, 1 = COM 1)
  6045.         bit 4 modem state (0 not assigned, 1 assigned)
  6046.         bit 5 modem is on
  6047.     AL = power conservation status information
  6048.         bit 0  power source (0 internal, 1 external)
  6049.         bits 1-2 low battery state
  6050.             00 no low battery condition
  6051.             01 low battery 1
  6052.             10 reserved
  6053.             11 low battery 2
  6054.         bits 3-4 power conservation mode
  6055.             00 automatic
  6056.             01 on
  6057.             10 off
  6058.             11 reserved
  6059.     BH = default system inactivity timeout (1-21 minutes)
  6060.     BL = current system inactivity timeout (1-21 minutes)
  6061.     CH = default video display inactivity timeout (1-63 minutes)
  6062.     CL = current video display inactivity timeout (1-63 minutes)
  6063.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  6064.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  6065. SeeAlso: AX=4280h,AX=4601h,INT 77
  6066. --------b-154601-----------------------------
  6067. INT 15 - Compaq SLT/286 - MODIFY POWER CONSERVATION/MODEM CONFIGURATION
  6068.     AX = 4601h
  6069.     BL = system inactivity timeout (1-21 minutes)
  6070.         FFh do not change
  6071.     CL = video display inactivity timeout (1-63 minutes)
  6072.         FFh do not change
  6073.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  6074.         FFh do not change
  6075.     DH = new modem state (00h turn off, 01h turn on, FFh don't change)
  6076. Return: CF clear if successful
  6077.         AH = 00h
  6078.         BL = current system inactivity timeout (1-21 minutes)
  6079.         CL = current video display inactivity timeout (1-63 minutes)
  6080.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  6081.         DH = modem state (FFh unchanged, 00h turned off, 01h turned on)
  6082.     CF set on error
  6083.         AH = error code
  6084.             01h input is out of range
  6085.             02h no modem present
  6086. SeeAlso: AX=4600h,INT 77
  6087. --------b-154604-----------------------------
  6088. INT 15 - Compaq "Caravel"/"Alladin" 08/05/93 ROMs - GET ???
  6089.     AX = 4604h
  6090. Return: CF clear if successful
  6091.         AL = byte read from I/O port 03F8h
  6092.     CF set on error (not supported)
  6093.         AH = 86h (unsupported function)
  6094. --------b-154605-----------------------------
  6095. INT 15 - Compaq "Caravel"/"Alladin" 08/05/93 ROMs - ???
  6096.     AX = 4605h
  6097. Return: CF clear if successful
  6098.     CF set on error (not supported)
  6099.         AH = 86h (unsupported function)
  6100. Note:    this function is a NOP (other than clearing CF) in the 08/05/93 version
  6101.       of the "Caravel" and "Aladdin" ROM
  6102. --------D-154900-----------------------------
  6103. INT 15 - Far East MS-DOS - GET DOS TYPE
  6104.     AX = 4900h
  6105. Return: CF clear if successful
  6106.         AH = 00h
  6107.         BL = type of DOS running
  6108.         00h DOS/V
  6109.         01h DOS/J or DOS/K (early IBM Japan versions of MS-DOS)
  6110.     CF set on error
  6111.         AH = 86h (function not supported)
  6112. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  6113. SeeAlso: INT 21/AH=30h
  6114. --------b-154DD4-----------------------------
  6115. INT 15 - HP 95LX - INSTALLATION CHECK
  6116.     AX = 4DD4h
  6117. Return: BX = 4850h ("HP") if HP 95LX
  6118.         CX = ??? (0101h)
  6119.         DL = ??? (00h)
  6120. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  6121. SeeAlso: INT 61"HP 95LX"
  6122. --------b-154E-------------------------------
  6123. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  6124.     AH = 4Eh
  6125.     AL = light sleep
  6126.         00h disabled
  6127.         01h enabled
  6128. Note:    when light sleep is disabled, the system will continue running at full
  6129.       speed; when enabled, it may automatically slow to conserve batteries
  6130. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  6131. --------B-154F-------------------------------
  6132. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  6133.     AH = 4Fh
  6134.     AL = hardware scan code
  6135.     CF set
  6136. Return: CF set
  6137.        AL = hardware scan code
  6138.     CF clear
  6139.        scan code should be ignored
  6140. Note:    called by INT 09 handler to translate scan codes; the INT 09 code does
  6141.       not examine the scan code it reads from the keyboard until after
  6142.       this function returns.  This permits software to rearrange the
  6143.       keyboard; for example, swapping the CapsLock and Control keys, or
  6144.       turning the right Shift key into Enter.
  6145. SeeAlso: INT 09,INT 15/AH=C0h
  6146. --------T-1550-------------------------------
  6147. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  6148.     AH = 50h
  6149.     BX = segment of page directory table
  6150.     CX = page number of page table
  6151. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  6152. --------T-1551-------------------------------
  6153. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  6154.     AH = 51h
  6155.     STACK:    DWORD    selector:offset of function
  6156. Return: registers as returned by function
  6157. Note:    executes function with privilege level 0 (highest privilege)
  6158. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  6159. --------B-155101-----------------------------
  6160. INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
  6161.     AX = 5101h
  6162. Return: CF set if successful
  6163.         AH = 00h
  6164.         AL = current configuration number
  6165.         00h system unit only
  6166.         FFh configuration not recognized
  6167.         BX = status flag
  6168.         bits 0-14: reserved
  6169.         bit 15: additional data is available (location TBD)
  6170.     CF clear on error
  6171.         AH = status
  6172.         01h expansion unit is not present
  6173.         86h function not supported
  6174. Note:    CF convention is the reverse of the standard convention for this
  6175.       interrupt.  (Perhaps a typo in the IBM BIOS Tech Ref?)
  6176. --------T-1552-------------------------------
  6177. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  6178.     AH = 52h
  6179. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  6180. --------p-155300BX0000-----------------------
  6181. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  6182.     AX = 5300h
  6183.     BX = 0000h (device ID of system BIOS)
  6184. Return: CF clear if successful
  6185.         AH = major version (BCD)
  6186.         AL = minor version (BCD)
  6187.         BX = 504Dh ("PM")
  6188.         CX = flags
  6189.         bit 0: 16-bit protected mode interface supported
  6190.         bit 1: 32-bit protected mode interface supported
  6191.         bit 2: CPU idle call reduces processor speed
  6192.         bit 3: BIOS power management disabled
  6193.         bits 4-7 reserved
  6194.     CF set on error
  6195.         AH = error code (86h) (see below)
  6196.  
  6197. Values for error code:
  6198.  01h    power management functionality disabled
  6199.  02h    interface connection already in effect
  6200.  03h    interface not connected
  6201.  04h    real-mode interface not connected
  6202.  05h    16-bit protected-mode interface already connected
  6203.  06h    16-bit protected-mode interface not supported
  6204.  07h    32-bit protected-mode interface already connected
  6205.  08h    32-bit protected-mode interface not supported
  6206.  09h    unrecognized device ID
  6207.  0Ah    invalid parameter value in CX
  6208.  0Bh-1Fh reserved for other interface and general errors
  6209.  20h-3Fh reserved for CPU errors
  6210.  40h-5Fh reserved for device errors
  6211.  60h    can't enter requested state
  6212.  61h-7Fh reserved for other system errors
  6213.  80h    no power management events pending
  6214.  81h-85h reserved for other power management event errors
  6215.  86h    APM not present
  6216.  87h-9Fh reserved for other power management event errors
  6217. --------p-155301BX0000-----------------------
  6218. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  6219.     AX = 5301h
  6220.     BX = 0000h (device ID of system BIOS)
  6221. Return: CF clear if successful
  6222.     CF set on error
  6223.         AH = error code (02h,09h) (see AX=5300h)
  6224. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  6225. --------p-155302BX0000-----------------------
  6226. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  6227.     AX = 5302h
  6228.     BX = 0000h (device ID of system BIOS)
  6229. Return: CF clear if successful
  6230.         AX = real-mode segment base address of protected-mode 16-bit code
  6231.         segment
  6232.         BX = offset of entry point
  6233.         CX = real-mode segment base address of protected-mode 16-bit data
  6234.         segment
  6235.     CF set on error
  6236.         AH = error code (05h,06h,09h) (see AX=5300h)
  6237. Notes:    the caller must initialize two consecutive descriptors with the
  6238.       returned segment base addresses; these descriptors must be valid
  6239.       whenever the protected-mode interface is called, and will have
  6240.       their limits arbitrarily set to 64K.
  6241.     the protected mode interface is invoked by making a far call with the
  6242.       same register values as for INT 15; it must be invoked while CPL=0,
  6243.       the code segment descriptor must have a DPL of 0, the stack must be
  6244.       in a 16-bit segment and have enough room for BIOS use and possible
  6245.       interrupts, and the current I/O permission bit map must allow access
  6246.       to the I/O ports used for power management.
  6247.     functions 00h-03h are not available from protected mode
  6248. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  6249. --------p-155303BX0000-----------------------
  6250. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  6251.     AX = 5303h
  6252.     BX = 0000h (device ID of system BIOS)
  6253. Return: CF clear if successful
  6254.         AX = real-mode segment base address of protected-mode 32-bit code
  6255.         segment
  6256.         EBX = offset of entry point
  6257.         CX = real-mode segment base address of protected-mode 16-bit code
  6258.         segment
  6259.         DX = real-mode segment base address of protected-mode 16-bit data
  6260.         segment
  6261.     CF set on error
  6262.         AH = error code (07h,08h,09h) (see AX=5300h)
  6263. Notes:    the caller must initialize three consecutive descriptors with the
  6264.       returned segment base addresses for 32-bit code, 16-bit code, and
  6265.       16-bit data, respectively; these descriptors must be valid whenever
  6266.       the protected-mode interface is called, and will have their limits
  6267.       arbitrarily set to 64K.
  6268.     the protected mode interface is invoked by making a far call to the
  6269.       32-bit code segment with the same register values as for INT 15; it
  6270.       must be invoked while CPL=0, the code segment descriptor must have a
  6271.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  6272.       for BIOS use and possible interrupts, and the current I/O permission
  6273.       bit map must allow access to the I/O ports used for power management.
  6274.     functions 00h-03h are not available from protected mode
  6275. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  6276. --------p-155304BX0000-----------------------
  6277. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  6278.     AX = 5304h
  6279.     BX = 0000h (device ID of system BIOS)
  6280. Return: CF clear if successful
  6281.     CF set on error
  6282.         AH = error code (03h,09h) (see AX=5300h)
  6283. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  6284. --------p-155305-----------------------------
  6285. INT 15 - Advanced Power Management Specification - CPU IDLE
  6286.     AX = 5305h
  6287. Return: after system leaves idle state
  6288.     CF clear
  6289. Notes:    call when the system is idle and should be suspended until the next
  6290.       system event or interrupt
  6291.     should not be called from within a hardware interrupt handler to avoid
  6292.       reentrance problems
  6293.     if an interrupt causes the system to resume normal processing, the
  6294.       interrupt may or may not have been handled when the BIOS returns
  6295.       from this call; thus, the caller should allow interrupts on return
  6296.     interrupt handlers may not retain control if the BIOS allows
  6297.       interrupts while in idle mode even if they are able to determine
  6298.       that they were called from idle mode
  6299.     the caller should issue this call continuously in a loop until it needs
  6300.       to perform some processing of its own
  6301. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  6302. --------p-155306-----------------------------
  6303. INT 15 - Advanced Power Management Specification - CPU BUSY
  6304.     AX = 5306h
  6305. Return: CF clear
  6306. Notes:    called to ensure that the system runs at full speed even on systems
  6307.       where the BIOS is unable to recognize increased activity (especially
  6308.       if interrupts are hooked by other programs and not chained to the
  6309.       BIOS)
  6310.     this call may be made even when the system is already running at full
  6311.       speed, but it will create unnecessary overhead
  6312.     should not be called from within a hardware interrupt handler to avoid
  6313.       reentrance problems
  6314. SeeAlso: AX=5305h
  6315. --------p-155307-----------------------------
  6316. INT 15 - Advanced Power Management Specification - SET POWER STATE
  6317.     AX = 5307h
  6318.     BX = device ID (see below)
  6319.     CX = system state ID
  6320.         0000h ready (not supported for device ID 0001h)
  6321.         0001h stand-by
  6322.         0002h suspend
  6323.         0003h off (not supported for device ID 0001h)
  6324.         0004h-FFFFh reserved
  6325. Return: CF clear if successful
  6326.     CF set on error
  6327.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  6328. Note:    should not be called from within a hardware interrupt handler to avoid
  6329.       reentrance problems
  6330.  
  6331. Values for device IDs:
  6332.  0000h    system BIOS
  6333.  0001h    all devices for which the system BIOS manages power
  6334.  01xxh    display (01FFh for all attached display devices)
  6335.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  6336.  03xxh    parallel ports (03FFh for all attached parallel ports)
  6337.  04xxh    serial ports (04FFh for all attached serial ports)
  6338.  0500h-FFFFh reserved
  6339. --------p-155307BX0001-----------------------
  6340. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  6341.     AX = 5307h
  6342.     BX = 0001h
  6343.     CX = 0001h
  6344. Return: CF clear
  6345. Notes:    puts the entire system into stand-by mode; normally called in response
  6346.       to a System Stand-by Request notification after any necessary
  6347.       processing, but may also be invoked at the caller's discretion
  6348.     should not be called from within a hardware interrupt handler to avoid
  6349.       reentrance problems
  6350.     the stand-by state is typically exited on an interrupt
  6351. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  6352. --------p-155307BX0001-----------------------
  6353. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  6354.     AX = 5307h
  6355.     BX = 0001h
  6356.     CX = 0002h
  6357. Return: after system is resumed
  6358.     CF clear
  6359. Notes:    puts the entire system into a low-power suspended state; normally
  6360.       called in response to a Suspend System Request notification after
  6361.       any necessary processing, but may also be invoked at the caller's
  6362.       discretion
  6363.     should not be called from within a hardware interrupt handler to avoid
  6364.       reentrance problems
  6365.     the caller may need to update its date and time values because the
  6366.       system could have been suspended for a long period of time
  6367. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  6368. --------p-155308BXFFFF-----------------------
  6369. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  6370.     AX = 5308h
  6371.     BX = FFFFh
  6372.     CX = new state
  6373.         0000h disabled
  6374.         0001h enabled
  6375. Return: CF clear if successful
  6376.     CF set on error
  6377.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  6378. Notes:    when power management is disabled, the system BIOS will not
  6379.       automatically power down devices, enter stand-by or suspended mode,
  6380.       or perform any power-saving actions in response to AX=5305h calls
  6381.     should not be called from within a hardware interrupt handler to avoid
  6382.       reentrance problems
  6383. SeeAlso: AX=5309h
  6384. --------p-155309BXFFFF-----------------------
  6385. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  6386.     AX = 5309h
  6387.     BX = FFFFh
  6388. Return: CF clear if successful
  6389.     CF set on error
  6390.         AH = error code (09h) (see AX=5300h)
  6391. Note:    should not be called from within a hardware interrupt handler to avoid
  6392.       reentrance problems
  6393. SeeAlso: AX=5308h
  6394. --------p-15530ABX0001-----------------------
  6395. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  6396.     AX = 530Ah
  6397.     BX = 0001h
  6398. Return: CF clear if successful
  6399.         BH = AC line status
  6400.         00h off-line
  6401.         01h on-line
  6402.         FFh unknown
  6403.         other reserved
  6404.         BL = battery status
  6405.         00h high
  6406.         01h low
  6407.         02h critical
  6408.         03h charging
  6409.         FFh unknown
  6410.         other reserved
  6411.         CL = remaining battery life
  6412.         00h-64h (0-100) percentage of full charge
  6413.         FFh unknown
  6414.     CF set on error
  6415.         AH = error code (09h) (see AX=5300h)
  6416. Note:    should not be called from within a hardware interrupt handler to avoid
  6417.       reentrance problems
  6418. --------p-15530B-----------------------------
  6419. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  6420.     AX = 530Bh
  6421. Return: CF clear if successful
  6422.         BX = event code
  6423.         0001h system stand-by request
  6424.         0002h system suspend request
  6425.         0003h normal resume system notification
  6426.         0004h critical resume system notification
  6427.         0005h battery low notification
  6428.     CF set on error
  6429.         AH = error code (03h,80h) (see AX=5300h)
  6430. Notes:    although power management events are often asynchronous, notification
  6431.       will not be made until polled via this call to permit software to
  6432.       only receive event notification when it is prepared to process
  6433.       power management events; since these events are not very time-
  6434.       critical, it should be sufficient to poll once or twice per second
  6435.     the critical resume notification is made after the system resumes
  6436.       from an emergency suspension; normally, the system BIOS only notifies
  6437.       its partner that it wishes to suspend and relies on the partner to
  6438.       actually request the suspension, but no notification is made on an
  6439.       emergency suspension
  6440.     should not be called from within a hardware interrupt handler to avoid
  6441.       reentrance problems
  6442. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  6443. --------T-155400-----------------------------
  6444. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  6445.     AX = 5400h
  6446.     ES:BX -> device information tables
  6447.     DI:DX -> dispatcher entry point
  6448. Note:    called by OmniView to notify programs loaded before OmniView of state
  6449.       changes inside OmniView
  6450. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  6451. --------T-155401-----------------------------
  6452. INT 15 C - Omniview Multitasker - PROCESS CREATION
  6453.     AX = 5401h
  6454.     ES:BX = process handle
  6455. Note:    called by OmniView to notify programs loaded before OmniView of state
  6456.       changes inside OmniView
  6457. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  6458. --------T-155402-----------------------------
  6459. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  6460.     AX = 5402h
  6461.     ES:DX = process handle
  6462. Note:    called by OmniView to notify programs loaded before OmniView of state
  6463.       changes inside OmniView
  6464. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  6465. --------T-155403-----------------------------
  6466. INT 15 C - Omniview Multitasker - SAVE
  6467.     AX = 5403h
  6468.     ES:DX = process swapping out
  6469. Note:    called by OmniView to notify programs loaded before OmniView of state
  6470.       changes inside OmniView
  6471. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  6472. --------T-155404-----------------------------
  6473. INT 15 C - Omniview Multitasker - RESTORE
  6474.     AX = 5404h
  6475.     ES:DX = process swapping in
  6476. Note:    called by OmniView to notify programs loaded before OmniView of state
  6477.       changes inside OmniView
  6478. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  6479. --------T-155405-----------------------------
  6480. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  6481.     AX = 5405h
  6482.     ES:DX = process swapping in
  6483. Note:    called by OmniView to notify programs loaded before OmniView of state
  6484.       changes inside OmniView
  6485. SeeAlso: AX=5406h
  6486. --------T-155406-----------------------------
  6487. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  6488.     AX = 5406h
  6489.     ES:DX = process swapping in
  6490. Note:    called by OmniView to notify programs loaded before OmniView of state
  6491.       changes inside OmniView
  6492. SeeAlso: AX=5405h
  6493. --------T-155407-----------------------------
  6494. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  6495.     AX = 5407h
  6496. Note:    called by OmniView to notify programs loaded before OmniView of state
  6497.       changes inside OmniView
  6498. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  6499. --------B-1580-------------------------------
  6500. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  6501.     AH = 80h
  6502.     BX = device ID
  6503.     CX = process ID
  6504.     CF clear
  6505. Return: CF clear if successful
  6506.         AH = 00h
  6507.     CF set on error
  6508.         AH = status
  6509.         80h invalid command (PC,PCjr)
  6510.         86h function not supported (XT)
  6511. Note:    this function should be hooked by a multitasker which wishes to keep
  6512.       track of device ownership; the default BIOS handler merely returns
  6513.       successfully
  6514. SeeAlso: AH=81h,AH=82h
  6515. --------B-1581-------------------------------
  6516. INT 15 C - OS HOOK - DEVICE CLOSE
  6517.     AH = 81h
  6518.     BX = device ID
  6519.     CX = process ID
  6520.     CF clear
  6521. Return: CF clear if successful
  6522.         AH = 00h
  6523.     CF set on error
  6524.         AH = status (see AH=80h)
  6525. Note:    this function should be hooked by a multitasker which wishes to keep
  6526.       track of device ownership; the default BIOS handler merely returns
  6527.       successfully
  6528. SeeAlso: AH=80h,AH=82h
  6529. --------B-1582-------------------------------
  6530. INT 15 C - OS HOOK - PROGRAM TERMINATION
  6531.     AH = 82h
  6532.     BX = process ID
  6533.     CF clear
  6534. Return: CF clear if successful
  6535.         AH = 00h
  6536.     CF set on error
  6537.         AH = status (see AH=80h)
  6538. Notes:    closes all devices opened by the given process ID with function 80h
  6539.     this function should be hooked by a multitasker which wishes to keep
  6540.       track of device ownership; the default BIOS handler merely returns
  6541.       successfully
  6542. SeeAlso: AH=80h,AH=81h
  6543. --------B-1583-------------------------------
  6544. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  6545.     AH = 83h
  6546.     AL = subfunction
  6547.         00h set interval
  6548.         CX:DX = microseconds to delay
  6549.         ES:BX -> byte whose high bit is to be set at end of interval
  6550.         01h cancel wait interval
  6551. Return: CF set on error or function already busy
  6552.         AH = status
  6553.         80h invalid command (PC,PCjr)
  6554.         86h function not supported (XT and later)
  6555.     CF clear if successful
  6556. Notes:    the resolution of the wait period is 977 microseconds on most systems
  6557.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  6558.       real-time clock chip which is available on INT 70
  6559.     IBM AT 1/10/84 BIOS ignores AL and always performs subfunction 00h
  6560. SeeAlso: AH=41h,AH=86h,INT 70
  6561. --------B-1584-------------------------------
  6562. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  6563.     AH = 84h
  6564.     DX = subfunction
  6565.         0000h read joystick switches
  6566.         Return: AL bits 7-4 = switch settings
  6567.         0001h read positions of joysticks
  6568.         Return: AX = X position of joystick A
  6569.             BX = Y position of joystick A
  6570.             CX = X position of joystick B
  6571.             DX = Y position of joystick B
  6572. Return: CF set on error
  6573.         AH = status
  6574.         80h invalid command (PC,PCjr)
  6575.         86h function not supported (other)
  6576.     CF clear if successful
  6577. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  6578.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  6579.     a 250kOhm joystick typically returns 0000h-01A0h
  6580. --------B-1585-------------------------------
  6581. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  6582.     AH = 85h
  6583.     AL = 00h SysRq key pressed
  6584.        = 01h SysRq key released
  6585.     CF clear
  6586. Return: CF clear if successful
  6587.         AH = 00h
  6588.     CF set on error
  6589.         AH = status (see AH=84h)
  6590. Notes:    called by keyboard decode routine
  6591.     the default handler simply returns successfully; programs which wish
  6592.       to monitor the SysRq key must hook this call
  6593. SeeAlso: INT 09
  6594. --------B-1586-------------------------------
  6595. INT 15 - BIOS - WAIT (AT,PS)
  6596.     AH = 86h
  6597.     CX:DX = interval in microseconds
  6598. Return: CF clear if successful (wait interval elapsed)
  6599.     CF set on error or AH=83h wait already in progress
  6600.         AH = status (see AH=84h)
  6601. Note:    the resolution of the wait period is 977 microseconds on most systems
  6602.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  6603.       real-time clock chip which is available on INT 70
  6604. SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70
  6605. --------B-1587-------------------------------
  6606. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  6607.     AH = 87h
  6608.     CX = number of words to copy (max 8000h)
  6609.     ES:SI -> global descriptor table
  6610. Return: CF set on error
  6611.     CF clear if successful
  6612.     AH = status
  6613.         00h source copied into destination
  6614.         01h parity error
  6615.         02h interrupt error
  6616.         03h address line 20 gating failed
  6617.         80h invalid command (PC,PCjr)
  6618.         86h unsupported function (XT,PS30)
  6619. Notes:    copy is done in protected mode with interrupts disabled by the default
  6620.       BIOS handler; many 386 memory managers perform the copy with
  6621.       interrupts enabled
  6622.     this function is incompatible with the OS/2 compatibility box
  6623. SeeAlso: AH=88h,AH=89h
  6624.  
  6625. Format of global descriptor table:
  6626. Offset    Size    Description
  6627.  00h 16 BYTEs    zeros
  6628.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  6629.  12h  3 BYTEs    24-bit linear source address, low byte first
  6630.  15h    BYTE    source segment access rights (93h)
  6631.  16h    WORD    zero
  6632.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  6633.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  6634.  1Dh    BYTE    destination segment access rights (93h)
  6635.  1Eh 18 BYTEs    zeros
  6636. --------B-1588-------------------------------
  6637. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  6638.     AH = 88h
  6639. Return: CF clear if successful
  6640.         AX = number of contiguous KB starting at absolute address 100000h
  6641.     CF set on error
  6642.         AH = status
  6643.         80h invalid command (PC,PCjr)
  6644.         86h unsupported function (XT,PS30)
  6645. Notes:    TSRs which wish to allocate extended memory to themselves often hook
  6646.       this call, and return a reduced memory size.    They are then free to
  6647.       use the memory between the new and old sizes at will.
  6648.     the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h
  6649.       for memory beyond 16MB
  6650.     not all BIOSes correctly return the carry flag, making this call
  6651.       unreliable unless one first checks whether it is supported through
  6652.       a mechanism other than calling the function and testing CF
  6653. SeeAlso: AH=87h,AH=C7h
  6654. --------B-1589-------------------------------
  6655. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  6656.     AH = 89h
  6657.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  6658.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  6659.     ES:SI -> GDT for protected mode
  6660.            offset 0h  null descriptor (initialize to zeros)
  6661.               8h  GDT descriptor
  6662.              10h  IDT descriptor
  6663.              18h  DS
  6664.              20h  ES
  6665.              28h  SS
  6666.              30h  CS
  6667.              38h  uninitialized, used to build descriptor for BIOS CS
  6668. Return: CF set on error
  6669.        AH = FFh  error enabling address line 20
  6670.     CF clear if successful
  6671.        AH = 00h
  6672.        in protected mode at specified address
  6673. Notes:    BL and BH must be multiples of 8
  6674.     the protected-mode CS must reference the same memory as the CS this
  6675.       function is called from because execution continues with the address
  6676.       following the interrupt call
  6677. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  6678. --------B-1590-------------------------------
  6679. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  6680.     AH = 90h
  6681.     AL = device type (see below)
  6682.     ES:BX -> request block for type codes 80h through BFh
  6683.     CF clear
  6684. Return: CF set if wait time satisfied
  6685.     CF clear if driver must perform wait
  6686.         AH = 00h
  6687. Notes:    type codes are allocated as follows:
  6688.       00-7F non-reentrant devices; OS must arbitrate access
  6689.       80-BF reentrant devices; ES:BX points to a unique control block
  6690.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  6691.     floppy and hard disk BIOS code uses this call to implement a timeout;
  6692.       for device types 00h and 01h, a return of CF set means that the
  6693.       timeout expired before the disk responded.
  6694.     this function should be hooked by a multitasker to allow other tasks
  6695.       to execute while the BIOS is waiting for I/O completion; the default
  6696.       handler merely returns with AH=00h and CF clear
  6697. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  6698.  
  6699. Values for device type:
  6700.  00h    disk
  6701.  01h    diskette
  6702.  02h    keyboard
  6703.  03h    PS/2 pointing device
  6704.  21h    waiting for keyboard input (Phoenix BIOS)
  6705.  80h    network
  6706.  FBh    digital sound (Tandy)
  6707.  FCh    disk reset (PS)
  6708.  FDh    diskette motor start
  6709.  FEh    printer
  6710. --------B-1591-------------------------------
  6711. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  6712.     AH = 91h
  6713.     AL = device type (see AH=90h)
  6714.     ES:BX -> request block for type codes 80h through BFh
  6715.     CF clear
  6716. Return: AH = 00h
  6717. Note:    this function should be hooked by a multitasker to allow other tasks
  6718.       to execute while the BIOS is waiting for I/O completion; the default
  6719.       handler merely returns with AH=00h and CF clear
  6720. SeeAlso: AH=90h
  6721. --------b-15BC-------------------------------
  6722. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  6723.     AH = BCh
  6724. Return: CF clear
  6725.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  6726. Note:    reads system timer channel 0 twice, then does calculations on returned
  6727.       values
  6728. --------E-15BF00-----------------------------
  6729. INT 15 - Rational Systems DOS/16M - ???
  6730.     AX = BF00h
  6731.     ???
  6732. Return: ???
  6733. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  6734. SeeAlso: AX=BF02h
  6735. --------E-15BF01-----------------------------
  6736. INT 15 - Rational Systems DOS/16M - ???
  6737.     AX = BF01h
  6738.     ???
  6739. Return: ???
  6740. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  6741.     called by DOS/4GW
  6742. SeeAlso: AX=BF00h,AX=BF02h
  6743. --------E-15BF02DX0000-----------------------
  6744. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  6745.     AX = BF02h
  6746.     DX = 0000h
  6747. Return: DX = nonzero if installed
  6748.         DX:SI -> XBRK structure (see below)
  6749. Note:    this function is also supported by DOS/4G
  6750. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  6751. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  6752.  
  6753. Format of XBRK structure:
  6754. Offset    Size    Description
  6755.  00h    DWORD    linear address of first available byte
  6756.  04h    DWORD    linear address of last available byte + 1 ???
  6757.  08h    DWORD    real-mode address of XBRK structure???
  6758.  0Ch    DWORD    ???
  6759.  10h  2 BYTEs    ???
  6760.  12h    WORD    segment of ???
  6761.  14h  8 BYTEs    ???
  6762.  1Ch 512 BYTEs    protected-mode IDT
  6763. 21Ch  N BYTEs    protected-mode GDT
  6764. --------E-15BF03-----------------------------
  6765. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  6766.     AX = BF03h
  6767.     BX = PSP segment of extender
  6768.     ???
  6769. Return: ???
  6770. Note:    if BX is not the PSP segment of the extender, it passes the call down
  6771.       the INT 15 chain; this allows nested instances of the extender
  6772. SeeAlso: AX=BF06h
  6773. --------E-15BF04-----------------------------
  6774. INT 15 - Rational Systems DOS/4GW - ???
  6775.     AX = BF04h
  6776.     BX = PSP segment of extender
  6777. Return: nothing???
  6778. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  6779.       the INT 15 chain; this allows nested instances of the extender
  6780.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  6781. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  6782. --------E-15BF05-----------------------------
  6783. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  6784.     AX = BF05h
  6785.     BX = PSP segment of extender
  6786. Return: nothing???
  6787. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  6788.       the INT 15 chain; this allows nested instances of the extender
  6789.     calls INT 67/AX=DE01h if ???
  6790. --------E-15BF06-----------------------------
  6791. INT 15 - Rational Systems DOS/4GW - ???
  6792.     AX = BF06h
  6793.     BX = PSP segment of extender
  6794.     ???
  6795. Return: ???
  6796. Note:    if BX is not the PSP segment of the extender, it passes the call down
  6797.       the INT 15 chain; this allows nested instances of the extender
  6798. SeeAlso: AX=BF03h
  6799. --------E-15BFDCDX0000-----------------------
  6800. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  6801.     AX = BFDCh
  6802.     DX = 0000h
  6803.     SI = 0000h
  6804. Return: DX = nonzero if installed
  6805.         DX:SI -> XBRK structure (see AX=BF02h)
  6806. SeeAlso: AX=BF02h
  6807. --------E-15BFDEBX0000-----------------------
  6808. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  6809.     AX = BFDEh
  6810.     BX = 0000h
  6811. Return: AX = ??? (0003h)
  6812.     BX = FFFFh
  6813. SeeAlso: AX=BF02h
  6814. --------E-15BFDEBX0001-----------------------
  6815. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  6816.     AX = BFDEh
  6817.     BX = 0001h
  6818. Return: BX = 0000h (success)
  6819.     CX:DX -> name of process manager executable
  6820. SeeAlso: AX=BFDEh/BX=0000h
  6821. --------E-15BFDEBX0002-----------------------
  6822. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  6823.     AX = BFDEh
  6824.     BX = 0002h
  6825.     CX:DX -> ???
  6826. Return: BX = 0000h (success)
  6827. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  6828. --------E-15BFDEBX0003-----------------------
  6829. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6830.     AX = BFDEh
  6831.     BX = 0003h
  6832. Return: BX = 0000h (success)
  6833.     CX:DX -> ???
  6834. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  6835. --------E-15BFDEBX0004-----------------------
  6836. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6837.     AX = BFDEh
  6838.     BX = 0004h
  6839.     CL = ???
  6840. Return: BX = 0000h (success)
  6841.     CX:DX -> XBRK structure (see AX=BF02h)
  6842. SeeAlso: AX=BFDEh/BX=0000h
  6843. --------E-15BFDEBX0005-----------------------
  6844. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6845.     AX = BFDEh
  6846.     BX = 0005h
  6847.     CX = new value for ???
  6848. Return: BX = 0000h (success)
  6849.     AX = old value of ???
  6850.     DS:SI -> ??? (if AX nonzero on return)
  6851.     ES:DI -> ??? (if AX zero on return)
  6852. Note:    called by DOS4GW.EXE
  6853. SeeAlso: AX=BFDEh/BX=0000h
  6854. --------E-15BFDEBX0006-----------------------
  6855. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6856.     AX = BFDEh
  6857.     BX = 0006h
  6858. Return: BX = 0000h (success)
  6859.     AH = interrupt number??? (BEh)
  6860.     CX:DX = ???
  6861. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  6862. --------E-15BFDEBX0007-----------------------
  6863. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  6864.     AX = BFDEh
  6865.     BX = 0007h
  6866.     CX:DX = ???
  6867. Return: BX = 0000h (success)
  6868. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  6869. --------E-15BFDEBX0008-----------------------
  6870. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6871.     AX = BFDEh
  6872.     BX = 0008h
  6873.     CX = segment of ???
  6874.     DS = ???
  6875. Return: BX = status
  6876.         0000h successful
  6877.         AL = ??? (80h or C0h)
  6878.         DX = ??? (0603h) if AL=C0h
  6879.         0001h failed
  6880.         AX = 0000h
  6881. Note:    called by DOS4GW.EXE
  6882. SeeAlso: AX=BFDEh/BX=0000h
  6883. --------E-15BFDEBX0009-----------------------
  6884. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  6885.     AX = BFDEh
  6886.     BX = 0009h
  6887. Return: BX = 0000h (success)
  6888.     CX:DX -> full pathname to LOAD32.EXP
  6889. SeeAlso: AX=BFDEh/BX=0000h
  6890. --------E-15BFDEBX000A-----------------------
  6891. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  6892.     AX = BFDEh
  6893.     BX = 000Ah
  6894. Return: BX = 0000h (success)
  6895.     AX = new value of ??? counter
  6896. Notes:    also resets a variety of values if the counter goes negative
  6897.     called by DOS4GW.EXE
  6898. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  6899. --------E-15BFDEBX000B-----------------------
  6900. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  6901.     AX = BFDEh
  6902.     BX = 000Bh
  6903. Return: AX = new value of ??? counter
  6904. Note:    called by DOS4GW.EXE
  6905. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  6906. --------E-15BFDEBX000C-----------------------
  6907. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6908.     AX = BFDEh
  6909.     BX = 000Ch
  6910.     CL = ???
  6911.         00h
  6912.         nonzero
  6913. Return: ???
  6914. SeeAlso: AX=BFDEh/BX=0000h
  6915. --------E-15BFDEBX000D-----------------------
  6916. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6917.     AX = BFDEh
  6918.     BX = 000Dh
  6919.     ???
  6920. Return: ???
  6921. SeeAlso: AX=BFDEh/BX=0000h
  6922. --------E-15BFDEBX000E-----------------------
  6923. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6924.     AX = BFDEh
  6925.     BX = 000Eh
  6926.     DX:CX -> ???
  6927. Return: AX = segment of handle for calling task
  6928.     BX = ??? (probably destroyed)
  6929.     DX:CX -> ???
  6930. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  6931. --------E-15BFDEBX000F-----------------------
  6932. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6933.     AX = BFDEh
  6934.     BX = 000Fh
  6935. Return: AX = segment of handle for calling task
  6936.     BX = ??? (probably destroyed)
  6937.     DX:CX -> ???
  6938. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  6939. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  6940. --------E-15BFDEBX0010-----------------------
  6941. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  6942.     AX = BFDEh
  6943.     BX = 0010h
  6944. Return: AX = segment of caller's task handle
  6945.     BX destroyed
  6946. SeeAlso: AX=BFDEh/BX=000Fh
  6947. --------E-15BFDEBX0011-----------------------
  6948. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6949.     AX = BFDEh
  6950.     BX = 0011h
  6951. Return: CX = code segment of DVDOS4GX.DVR
  6952.     BX = ??? (0004h)
  6953. SeeAlso: AX=BFDEh/BX=0000h
  6954. --------E-15BFDEBX0012-----------------------
  6955. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6956.     AX = BFDEh
  6957.     BX = 0012h
  6958. Return: DX = code segment of DVDOS4GX.DVR
  6959.     BX = ??? (012Ch)
  6960.     CX = ??? (0006h)
  6961. SeeAlso: AX=BFDEh/BX=0000h
  6962. --------E-15BFDEBX0013-----------------------
  6963. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6964.     AX = BFDEh
  6965.     BX = 0013h
  6966. Return: DX:CX -> ???
  6967. SeeAlso: AX=BFDEh/BX=000Eh
  6968. --------E-15BFDEBX0014-----------------------
  6969. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  6970.     AX = BFDEh
  6971.     BX = 0014h
  6972.     CX = index of ??? mailbox
  6973.         (0000h-0004h valid, but no range checking done)
  6974. Return: AX,BX destroyed
  6975. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  6976. --------E-15BFDEBX0015-----------------------
  6977. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  6978.     AX = BFDEh
  6979.     BX = 0015h
  6980.     CX = index of ??? mailbox
  6981.         (0000h-0004h valid, but no range checking done)
  6982. Return: AX,BX destroyed
  6983. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  6984. --------E-15BFDEBX0016-----------------------
  6985. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  6986.     AX = BFDEh
  6987.     BX = 0016h
  6988.     CX = index of ??? mailbox
  6989.         (0000h-0004h valid, but no range checking done)
  6990. Return: AX = status
  6991.         0000h no one owns mailbox
  6992.         0001h mailbox has an owner
  6993.     BX destroyed
  6994. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  6995. --------E-15BFDEBX0017-----------------------
  6996. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  6997.     AX = BFDEh
  6998.     BX = 0017h
  6999.     CX = index of ??? mailbox
  7000.         (0000h-0004h valid, but no range checking done)
  7001. Return: AX = segment of mailbox owner's handle
  7002.     BX = segment of caller's task handle
  7003. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  7004. --------E-15BFDEBXFFFD-----------------------
  7005. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  7006.     AX = BFDEh
  7007.     BX = FFFDh
  7008. Return: CX:DX = ???
  7009. SeeAlso: AX=BFDEh/BX=FFFEh
  7010. --------E-15BFDEBXFFFE-----------------------
  7011. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  7012.     AX = BFDEh
  7013.     BX = FFFEh
  7014.     CX:DX = ???
  7015. SeeAlso: AX=BFDEh/BX=FFFDh
  7016. --------E-15BFDEBXFFFF-----------------------
  7017. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  7018.     AX = BFDEh
  7019.     BX = FFFFh
  7020. SeeAlso: AX=BFDEh/BX=0000h
  7021. --------B-15C0-------------------------------
  7022. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  7023.     AH = C0h
  7024. Return: CF set if BIOS doesn't support call
  7025.     CF clear on success
  7026.         ES:BX -> ROM table (see below)
  7027.     AH = status
  7028.         00h successful
  7029.         86h unsupported function
  7030. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  7031.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  7032.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  7033.       and a model byte at absolute address FE845h
  7034.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  7035.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  7036.       past the end of the configuration table
  7037.     the Phoenix 386 BIOS contains a second version and date string
  7038.       (presumably the last modification for that OEM version) beginning at
  7039.       F000h:FFD8h, with each byte doubled (so that both ROM chips contain
  7040.       the complete information)
  7041. SeeAlso: AH=C7h,AH=C9h,AH=D1h
  7042.  
  7043. Format of ROM configuration table:
  7044. Offset    Size    Description
  7045.  00h    WORD    number of bytes following
  7046.  02h    BYTE    model (see below)
  7047.  03h    BYTE    submodel (see below)
  7048.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  7049.  05h    BYTE    feature byte 1 (see below)
  7050.  06h    BYTE    feature byte 2 (see below)
  7051.  07h    BYTE    feature byte 3:
  7052.         bits 7-5 reserved
  7053.         bit 4: ??? (set on 1992 PS/1's, N51SX, CL57SX, 35SX?, 40SX?)
  7054.         bit 3: SCSI subsystem supported on system board
  7055.         bit 2: information panel installed
  7056.         bit 1: IML (Initial Machine Load) system
  7057.         bit 0: SCSI supported in IML
  7058.  08h    BYTE    feature byte 4:
  7059.         bit 7: ??? (set on N51SX, CL57SX)
  7060.         bits 6-4: reserved
  7061.         bit 3: ??? (set on some 1992 PS/1's, 35SX, 40SX)
  7062.         bits 2-1: reserved
  7063.         bit 0: ??? (set on N51SX, CL57SX, 57SX)
  7064.  09h    BYTE    feature byte 5:
  7065.         reserved (0) (IBM)
  7066.         ??? (08h) (Phoenix 386 v1.10)
  7067. ---AWARD BIOS---
  7068.  0Ah  N BYTEs    AWARD copyright notice
  7069. ---Phoenix BIOS---
  7070.  0Ah    BYTE    ??? (00h)
  7071.  0Bh    BYTE    major version
  7072.  0Ch    BYTE    minor version (BCD)
  7073.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  7074. ---Quadram Quad386---
  7075.  0Ah 17 BYTEs    ASCII signature string "Quadram Quad386XT"
  7076.  
  7077. Bitfields for feature byte 1:
  7078.  bit 7    DMA channel 3 used by hard disk BIOS
  7079.  bit 6    2nd 8259 installed
  7080.  bit 5    Real-Time Clock installed
  7081.  bit 4    INT 15/AH=4Fh called upon INT 09h
  7082.  bit 3    wait for external event (INT 15/AH=41h) supported
  7083.  bit 2    extended BIOS area allocated (usually at top of RAM)
  7084.  bit 1    bus is Micro Channel instead of ISA
  7085.  bit 0    system has dual bus (Micro Channel + ISA)
  7086.  
  7087. Bitfields for feature byte 2:
  7088.  bit 7    reserved
  7089.  bit 6    INT 16/AH=09h (keyboard functionality) supported
  7090.  bit 5    INT 15/AH=C6h (get POS data) supported
  7091.  bit 4    INT 15/AH=C7h (return memory map info) supported
  7092.  bit 3    INT 15/AH=C8h (en/disable CPU functions) supported
  7093.  bit 2    non-8042 keyboard controller
  7094.  bit 1    data streaming supported
  7095.  bit 0    reserved
  7096.  
  7097. Values for model/submodel/revision:
  7098. Model  Submdl  Rev    BIOS date    System
  7099.  FFh    *    *    04/24/81    PC (original)
  7100.  FFh    *    *    10/19/81    PC (some bugfixes)
  7101.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  7102.  FFh    46h    ***      ???        Olivetti M15
  7103.  FEh    *    *    08/16/82    PC XT
  7104.  FEh    *    *    11/08/82    PC XT and Portable
  7105.  FEh    43h    ***      ???        Olivetti M240
  7106.  FEh    A6h    ???      ???        Quadram Quad386
  7107.  FDh    *    *    06/01/83    PCjr
  7108.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  7109.  FCh    00h    00h      ???        PC3270/AT
  7110.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  7111.  FCh    00h    > 01h      ???        7531/2 Industrial AT
  7112.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  7113.  FCh    01h    00h    09/17/87    Tandy 3000
  7114.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  7115.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  7116.  FCh    01h    00h    04/05A92    Toshiba T4500SX-C
  7117.  FCh    01h    00h    07/17o92    Toshiba T1800SX
  7118.  FCh    01h    00h    12/25n92    Toshiba T1850SX
  7119.  FCh    01h    00h    01/13E93    Toshiba T4400C
  7120.             (Those date characters are not typos)
  7121.  FCh    01h    00h    04/08/93    Compaq
  7122.  FCh    01h    00h    04/12/93    Compaq
  7123.  FCh    01h    20h    06/10/92    AST
  7124.  FCh    01h    30h      ???        Tandy 3000NL
  7125.  FCh    01h    ???      ???        Compaq 286/386
  7126.  FCh    02h    00h    04/21/86    PC XT-286
  7127.  FCh    02h    00h    08/05/93    Compaq "Caravel" ROM
  7128.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  7129.  FCh    04h    02h      ???        PS/2 Model 50
  7130.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  7131.  FCh    04h    04h      ???        PS/2 Model 50Z
  7132.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  7133.  FCh    06h    00h      ???        IBM 7552-140 "Gearbox"
  7134.  FCh    06h    01h      ???        IBM 7552-540 "Gearbox"
  7135.  FCh    08h    ***      ???        Epson, unknown model
  7136.  FCh    08h    00h      ???        PS/2 Model 25/286
  7137.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  7138.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  7139.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  7140.  FCh    20h    00h    02/18/93    Compaq ProLinea
  7141.  FCh    30h    ***      ???        Epson, unknown model
  7142.  FCh    31h    ***      ???        Epson, unknown model
  7143.  FCh    33h    ***      ???        Epson, unknown model
  7144.  FCh    42h    ***      ???        Olivetti M280
  7145.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  7146.  FCh    48h    ***      ???        Olivetti M290
  7147.  FCh    4Fh    ***      ???        Olivetti M250
  7148.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  7149.  FCh    51h    ***      ???        Olivetti PCS286
  7150.  FCh    52h    ***      ???        Olivetti M300
  7151.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  7152.  FCh    81h    01h      ???        "OEM machine"
  7153.  FCh    82h    01h      ???        "OEM machine"
  7154.  FCh    94h    00h      ???        Zenith 386
  7155.  FBh    00h    01h    01/10/86    PC XT-089, Enh Keyb, 3.5" support
  7156.  FBh    00h    02h    05/09/86    PC XT
  7157.  FBh    4Ch    ***      ???        Olivetti M200
  7158.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  7159.  FAh    00h    01h    12/12/86    PS/2 Model 30
  7160.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  7161.  FAh    30h    00h      ???        IBM Restaurant Terminal
  7162.  FAh    4Eh    ***      ???        Olivetti M111
  7163.  FAh    FEh    00h      ???        IBM PCradio 9075
  7164.  F9h    00h    00h    09/13/85    PC Convertible
  7165.  F9h    FFh    00h      ???        PC Convertible
  7166.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  7167.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  7168.  F8h    02h    00h      ???        PS/2 Model 55-5571
  7169.  F8h    04h    00h      ???        PS/2 Model 70
  7170.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  7171.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  7172.  F8h    05h    00h      ???        IBM PC 7568
  7173.  F8h    06h    00h      ???        PS/2 Model 55-5571
  7174.  F8h    07h    00h      ???        IBM PC 7561/2
  7175.  F8h    07h    01h      ???        PS/2 Model 55-5551
  7176.  F8h    07h    02h      ???        IBM PC 7561/2
  7177.  F8h    07h    03h      ???        PS/2 Model 55-5551
  7178.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  7179.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  7180.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  7181.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  7182.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  7183.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  7184.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  7185.  F8h    0Eh    00h      ???        PS/1 486SX
  7186.  F8h    0Fh    00h      ???        PS/1 486DX
  7187.  F8h    10h    00h      ???        PS/2 Model 55-5551
  7188.  F8h    11h    00h    10/01/90    PS/2 Model 90 XP (25 MHz 486)
  7189.  F8h    12h    00h      ???        PS/2 Model 95 XP
  7190.  F8h    13h    00h    10/01/90    PS/2 Model 90 XP (33 MHz 486)
  7191.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486), 95 XP
  7192.  F8h    15h    00h      ???        PS/2 Model 90 XP
  7193.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  7194.  F8h    17h    00h      ???        PS/2 Model 90 XP
  7195.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  7196.  F8h    1Ah    00h      ???        PS/2 Model 95 XP
  7197.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  7198.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  7199.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  7200.  F8h    23h    00h      ???        PS/2 Model L40 SX
  7201.  F8h    23h    01h      ???        PS/2 Model L40 SX (20 MHz 386SX)
  7202.  F8h    25h    00h      ???        PS/2 Model 57 SLC
  7203.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  7204.  F8h    26h    00h      ???        PS/2 Model 57 SX
  7205.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  7206.  F8h    28h    00h      ???        PS/2 Model 95 XP
  7207.  F8h    29h    00h      ???        PS/2 Model 90 XP
  7208.  F8h    2Ah    00h      ???        PS/2 Model 95 XP (50 MHz 486)
  7209.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  7210.  F8h    2Ch    00h      ???        PS/2 Model 95 XP
  7211.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  7212.  F8h    2Dh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX)
  7213.  F8h    2Eh    00h      ???        PS/2 Model 95 XP
  7214.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  7215.  F8h    2Fh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX + 487SX)
  7216.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  7217.  F8h    33h    00h      ???        PS/2 Model 30-386
  7218.  F8h    34h    00h      ???        PS/2 Model 25-386
  7219.  F8h    36h    00h      ???        PS/2 Model 95 XP
  7220.  F8h    37h    00h      ???        PS/2 Model 90 XP
  7221.  F8h    38h    00h      ???        PS/2 Model 57
  7222.  F8h    39h    00h      ???        PS/2 Model 95 XP
  7223.  F8h    3Fh    00h      ???        PS/2 Model 90 XP
  7224.  F8h    40h    00h      ???        PS/2 Model 95 XP
  7225.  F8h    41h    00h      ???        PS/2 Model 77
  7226.  F8h    45h    00h      ???        PS/2 Model 90 XP (Pentium)
  7227.  F8h    46h    00h      ???        PS/2 Model 95 XP (Pentium)
  7228.  F8h    47h    00h      ???        PS/2 Model 90/95 E (Pentium)
  7229.  F8h    48h    00h      ???        PS/2 Model 85
  7230.  F8h    49h    00h      ???        PS/ValuePoint 325T
  7231.  F8h    4Ah    00h      ???        PS/ValuePoint 425SX
  7232.  F8h    4Bh    00h      ???        PS/ValuePoint 433DX
  7233.  F8h    4Eh    00h      ???        PS/2 Model 295
  7234.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  7235.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  7236.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  7237.  F8h    56h    00h      ???        PS/2 Model CL57 SX
  7238.  F8h    57h    00h      ???        PS/2 Model 90 XP
  7239.  F8h    58h    00h      ???        PS/2 Model 95 XP
  7240.  F8h    59h    00h      ???        PS/2 Model 90 XP
  7241.  F8h    5Ah    00h      ???        PS/2 Model 95 XP
  7242.  F8h    5Bh    00h      ???        PS/2 Model 90 XP
  7243.  F8h    5Ch    00h      ???        PS/2 Model 95 XP
  7244.  F8h    5Dh    00h      ???        PS/2 Model N51 SLC
  7245.  F8h    5Eh    00h      ???        IBM ThinkPad 700
  7246.  F8h    61h    ***      ???        Olivetti P500
  7247.  F8h    62h    ***      ???        Olivetti P800
  7248.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  7249.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  7250.  F8h    81h    00h      ???        PS/2 Model 55-5502
  7251.  F8h    87h    00h      ???        PS/2 Model N33SX
  7252.  F8h    88h    00h      ???        PS/2 Model 55-5530T
  7253.  F8h    97h    00h      ???        PS/2 Model 55 Note N23SX
  7254.  F8h    99h    00h      ???        PS/2 Model N51 SX
  7255.  F8h    F2h    30h      ???        Reply Model 32
  7256.  F8h    F6h    30h      ???        Memorex Telex
  7257.  F8h    FDh    00h      ???        IBM Processor Complex (with VPD)
  7258.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  7259.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  7260.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  7261.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  7262.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  7263.  E1h    00h    00h      ???        PS/2 Model 55-5530 Laptop
  7264.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  7265.  30h    ???    ???      ???        Sperry PC
  7266.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  7267.  ???    56h    ???      ???        Olivetti, unknown model
  7268.  ???    74h    ???      ???        Olivetti, unknown model
  7269.     * This BIOS call is not implemented in these early versions.
  7270.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  7271.    ** These BIOS versions require the DASDDRVR.SYS patches.
  7272.   *** These Olivetti and Epson machines store the submodel in the byte at
  7273.     F000h:FFFDh.
  7274.  
  7275. Values for Dell model byte:
  7276.  02h    Dell 200
  7277.  03h    Dell 300
  7278.  05h    Dell 220
  7279.  06h    Dell 310
  7280.  07h    Dell 325
  7281.  09h    Dell 310A
  7282.  0Ah    Dell 316
  7283.  0Bh    Dell 220E
  7284.  0Ch    Dell 210
  7285.  0Dh    Dell 316SX
  7286.  0Eh    Dell 316LT
  7287.  0Fh    Dell 320LX
  7288.  11h    Dell 425E
  7289. --------B-15C1-------------------------------
  7290. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  7291.     AH = C1h
  7292. Return: CF set on error
  7293.     CF clear if successful
  7294.         ES = segment of data area
  7295. SeeAlso: AH=04h"ABIOS"
  7296. --------M-15C200-----------------------------
  7297. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  7298.     AX = C200h
  7299.     BH = new state
  7300.         00h disabled
  7301.         01h enabled
  7302. Return: CF set on error
  7303.     AH = status
  7304.         00h successful
  7305.         01h invalid function
  7306.         02h invalid input
  7307.         03h interface error
  7308.         04h need to resend
  7309.         05h no device handler installed
  7310. --------M-15C201-----------------------------
  7311. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  7312.     AX = C201h
  7313. Return: CF set on error
  7314.         AH = status (see AX=C200h)
  7315.     CF clear if successful
  7316.         BH = device ID
  7317.         BL = value returned by attached device after reset
  7318.         AAh if device is a mouse
  7319. Note:    after successful completion of this call, the pointing device is set
  7320.       as follows: disabled, sample rate 100 Hz, resolution 4 counts/mm,
  7321.       scaling 1:1, unchanged data package size
  7322. SeeAlso: INT 33/AX=0000h
  7323. --------M-15C202-----------------------------
  7324. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  7325.     AX = C202h
  7326.     BH = sampling rate
  7327.         00h 10/second
  7328.         01h 20/second
  7329.         02h 40/second
  7330.         03h 60/second
  7331.         04h 80/second
  7332.         05h 100/second
  7333.         06h 200/second
  7334. Return: CF set on error
  7335.         AH = status (see AX=C200h)
  7336. SeeAlso: INT 33/AX=001Ch
  7337. --------M-15C203-----------------------------
  7338. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  7339.     AX = C203h
  7340.     BH = resolution
  7341.         00h one count per mm
  7342.         01h two counts per mm
  7343.         02h four counts per mm
  7344.         03h eight counts per mm
  7345. Return: CF set on error
  7346.         AH = status (see AX=C200h)
  7347. --------M-15C204-----------------------------
  7348. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  7349.     AX = C204h
  7350. Return: CF set on error
  7351.         AH = status (see AX=C200h)
  7352.     CF clear if successful
  7353.         BH = device ID
  7354. --------M-15C205-----------------------------
  7355. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  7356.     AX = C205h
  7357.     BH = data package size (1 - 8 bytes)
  7358. Return: CF set on error
  7359.         AH = status (see AX=C200h)
  7360. Note:    the pointing device is set as follows: disabled, 100 Hz sample rate,
  7361.       resolution 4 counts/mm, scaling 1:1
  7362. SeeAlso: AX=C201h
  7363. --------M-15C206-----------------------------
  7364. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS
  7365.     AX = C206h
  7366.     BH = subfunction
  7367.         00h return device status
  7368.         Return: BL = pointing device status (see below)
  7369.             CL = resolution (see AX=C203h)
  7370.             DL = sample rate, reports per second
  7371.         01h set scaling at 1:1
  7372.         02h set scaling at 2:1
  7373. Return: CF set on error
  7374.         AH = status (see AX=C200h)
  7375.  
  7376. Bitfields for pointing device status:
  7377.  bit 0    right button pressed
  7378.  bit 1    reserved
  7379.  bit 2    left button pressed
  7380.  bit 3    reserved
  7381.  bit 4    0 if 1:1 scaling, 1 if 2:1 scaling
  7382.  bit 5    device enabled
  7383.  bit 6    0 if stream mode, 1 if remote mode
  7384.  bit 7    reserved
  7385. --------M-15C207-----------------------------
  7386. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  7387.     AX = C207h
  7388.     ES:BX -> FAR user device handler
  7389. Return: CF set on error
  7390.         AH = status (see AX=C200h)
  7391. Note:    when the subroutine is called, it is passed the following values on
  7392.       the stack; the handler should return with a FAR return without
  7393.       popping the stack:
  7394.         WORD 1: status (see below)
  7395.         WORD 2: X data (high byte = 00h)
  7396.         WORD 3: Y data (high byte = 00h)
  7397.         WORD 4: 0000h
  7398. SeeAlso: INT 33/AX=000Ch
  7399.  
  7400. Bitfields for status:
  7401.  bits 15-8 reserved (0)
  7402.  bit 7    Y data overflowed
  7403.  bit 6    X data overflowed
  7404.  bit 5    Y data is negative
  7405.  bit 4    X data is negative
  7406.  bit 3    reserved (1)
  7407.  bit 2    reserved (0)
  7408.  bit 1    right button pressed
  7409.  bit 0    left button pressed
  7410. --------B-15C3------------------------------
  7411. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  7412.     AH = C3h
  7413.     AL = function
  7414.         00h disable PS/2 watchdog timer
  7415.         01h enable PS/2 watchdog timer
  7416.         BX = timer counter (0001h-00FFh)
  7417.         02h disable Gearbox system
  7418.         03h enable Gearbox system
  7419. Return: CF set on error
  7420.     CF clear if successful
  7421. Note:    the watchdog timer generates an NMI
  7422. --------B-15C4-------------------------------
  7423. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  7424.     AH = C4h
  7425.     AL = subfunction
  7426.         00h return base POS register address
  7427.         01h enable selected slot for setup
  7428.         BL = slot number (1 to 8)
  7429.         02h disable setup for all slots
  7430. Return: CF set on error
  7431.     DX = base POS register address (if subfunction 00h)
  7432. SeeAlso: AH=C6h
  7433. --------B-15C5-------------------------------
  7434. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  7435.     AH = C5h
  7436.     AL = interrupt being invoked
  7437.         01h INT 19
  7438.         02h INT 14
  7439.         03h INT 16
  7440.         04h INT 40 (floppy INT 13)
  7441.         05h INT 17
  7442.         06h INT 10
  7443.         07h INT 12
  7444.         08h INT 11
  7445.         09h INT 1A
  7446. Return: all registers except AX must be preserved
  7447. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  7448.       handlers on the PS/2 Models 30/286, 50Z, and 95
  7449.     default handler does nothing and returns CF clear for the above
  7450.       subfunctions, CF set and AH=86h for all other subfunctions
  7451.     value of AX passed to the original interrupt handler is pushed on
  7452.       stack immediately prior to call
  7453. --------B-15C6-------------------------------
  7454. INT 15 U - later PS/2 models - GET POS DATA
  7455.     AH = C6h
  7456.     ???
  7457. Return: ???
  7458. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  7459.     IBM reports that "there are a number of problems with this call" and
  7460.       does not recommend its use.
  7461. SeeAlso: AH=C4h
  7462. --------B-15C7-------------------------------
  7463. INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
  7464.     AH = C7h
  7465.     DS:SI -> user supplied memory map table (see below)
  7466. Note:    call AH=C0h and examine bit 4 of feature byte 2 to check if this
  7467.       function is supported
  7468. Return: CF set on error, clear if successful
  7469. SeeAlso: AH=C0h,AH=C9h,AH=D1h
  7470.  
  7471. Format of memory-map table structure:
  7472. Offset    Size    Description
  7473.  00h    WORD    length of table (excluding this word)
  7474.  02h    DWORD    local memory between 1M and 16M, in 1K blocks
  7475.  06h    DWORD    local memory between 16M and 4G, in 1K blocks
  7476.  0Ah    DWORD    system memory between 1M and 16M, in 1K blocks
  7477.  0Eh    DWORD    system memory between 16M and 4G, in 1K blocks
  7478.  12h    DWORD    cacheable memory between 1M and 16M, in 1K blocks
  7479.  16h    DWORD    cacheable memory between 16M and 4G, in 1K blocks
  7480.  1Ah    DWORD    1K blocks before start of non-system memory between 1M and 16M
  7481.  1Eh    DWORD    1K blocks before start of non-system memory between 16M and 4G
  7482.  22h  2 DWORDs    reserved
  7483. --------B-15C8-------------------------------
  7484. INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
  7485.     AH = C8h
  7486.     AL = function
  7487.         00h disable cache or (90 and 95) disable cache L1
  7488.         01h enable cache or (90 and 95) enable cache L1
  7489.         ---models 90 and 95 only---
  7490.         02h disable cache L2
  7491.         03h enable cache L2
  7492.         04h disable both caches
  7493.         05h enable both caches
  7494.         06h return status of both caches
  7495.         07h-FFh Reserved
  7496. Return: CF set on error
  7497.     CF clear if successful
  7498.         AH = status (see below)
  7499.     For subfunction 06h only:
  7500.         BH = status of cache L2
  7501.         00h enabled
  7502.         01h disabled or not installed
  7503.         BL = status of cache L1 (same codes as BH)
  7504. Notes:     supported by at least PS/2 70, 70/486, 80-A21, 90, 95
  7505.     call AH=C0h and examine bit 3 of feature byte 2 to check if this
  7506.       function is supported.
  7507.     on a 486 system, any external caches must be disabled when the
  7508.       on-chip cache (L1) is disabled.
  7509. SeeAlso: AH=C0h
  7510.  
  7511. Values for status:
  7512.  00h    operation successful
  7513.  01h    function choice (in AL) is invalid
  7514.  02h    NVRAM data is invalid
  7515.  03h    cache test error
  7516.  04h    (90 and 95 only) cannot perform operation requested due to state of
  7517.       other cache (see note above)
  7518.  05h    no L2 cache is present
  7519. --------B-15C9-------------------------------
  7520. INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  7521.     AH = C9h
  7522.     AL = 10h (may be required on some non-PS BIOSes)
  7523. Return: CF clear if successful
  7524.         AH = 00h
  7525.         CH = CPU type
  7526.         03h 80386DX or clone
  7527.         04h 80486
  7528.         23h 80386SX or clone
  7529.         CL = mask revision (stepping level)
  7530.         80386:
  7531.             03h B1
  7532.             05h D0
  7533.             08h D1/D2/E1
  7534.         80386SX
  7535.             08h D1
  7536.     CF set on error
  7537.         AH = status (80h,86h = function not supported)
  7538. Notes:    the BIOS must save DX at startup in order to be able to support this
  7539.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  7540.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  7541. --------B-15CA-------------------------------
  7542. INT 15 U - PS/2 Model 95 - RESERVED
  7543.     AH = CAh
  7544.     ???
  7545. Return: ???
  7546. --------B-15CB-------------------------------
  7547. INT 15 U - PS/2 Model 95 - RESERVED
  7548.     AH = CBh
  7549.     ???
  7550. Return: ???
  7551. --------B-15CC-------------------------------
  7552. INT 15 U - PS/2 Model 95 - RESERVED
  7553.     AH = CCh
  7554.     ???
  7555. Return: ???
  7556. --------B-15CD-------------------------------
  7557. INT 15 U - PS/2 Model 95 - RESERVED
  7558.     AH = CDh
  7559.     ???
  7560. Return: ???
  7561. --------B-15CE--BL00-------------------------
  7562. INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
  7563.     AH = CEh
  7564.     BL = 00h-0Eh arbitration level to be allocated
  7565.          0Fh-FFh reserved
  7566.     AL = option byte
  7567.         bit 7-1: reserved (0)
  7568.         bit 0: 0 = need DMA channel for arbitration level requested
  7569.            1 = no channel required for arbitration level
  7570. Return: CF set on error
  7571.         AH = status (80h,86h = function not supported)
  7572.     CF clear on success
  7573.         AL = channel number
  7574.         00h-07h channel number allocated for the arbiration level
  7575.         08h-FEh reserved
  7576.         FFh    no channel requested for arbitration level
  7577.         AH = status
  7578.         00h success
  7579.         01h arbitration level not available
  7580.         02h channel not available
  7581.         03h invalid arbitration level passed
  7582. Notes:     arbitration level 00h has the highest priority, 0Eh the lowest
  7583.      to perform a DMA transfer operation, be sure to call this function
  7584.        first, and call AH=CFh afterward.  Failure to use this function
  7585.        can cause unpredictable results.
  7586. SeeAlso: AH=CFh
  7587. --------B-15CF-------------------------------
  7588. INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
  7589.     AH = CFh
  7590.     BL = arbitration level to be deallocated (see AH=CEh)
  7591. Return: CF set on error
  7592.         AH = status (80h,86h = function not supported)
  7593.     CF clear on success
  7594.         AH = status
  7595.         00h success
  7596.         04h arbitration level not allocated
  7597. SeeAlso: AH=CEh
  7598. --------B-15D0-------------------------------
  7599. INT 15 - later PS/2s - RESERVED
  7600.     AH = D0h
  7601.     ???
  7602. Return: ???
  7603. --------B-15D100DX0000-----------------------
  7604. INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
  7605.     AX = D100h
  7606.     DX = 0000h (reserved, must set to 0)
  7607. Return: BL = size of one DDT entry, in bytes
  7608.     CX = number of DDT entries
  7609.     AH = return code (see below)
  7610.     CF set on error
  7611.     CF clear on success
  7612. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h
  7613.  
  7614. Values for return code:
  7615.  00h    success
  7616.  01h    requested DDT entry not found
  7617.  02h    DDT data not valid
  7618.  86h    function not supported
  7619. --------B-15D101-----------------------------
  7620. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
  7621.     AX = D101h
  7622.     BX = number of requested entry (starting with 1)
  7623.     DX = 0000h (reserved, must be set to 0)
  7624.     ES:DI -> buffer to contain DDT entry (see below)
  7625. Return:    AH = return code (see AX=D100h)
  7626.     CF set on error
  7627.     CF clear on success
  7628.         ES:DI buffer filled with DDT entry
  7629. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h
  7630.  
  7631. Format of DDT:
  7632. Offset    Size    Description
  7633.  00h    BYTE    bits 7-4: reserved (set to 0)
  7634.         bits 3-0: slot of device (0 = system board)
  7635.  01h    BYTE    bits 7-4: second interrupt for this device (0 = none)
  7636.         bits 3-0: first interrupt for this device (0 = none)
  7637.  02h    BYTE    bits 7-4: second arbitration level for this device
  7638.         bits 3-0: first arbitration level for this device
  7639.  03h    WORD    DDT indicators (see below)
  7640.  05h    BYTE    reserved (0)
  7641.  06h    WORD    device ID (0 = none)
  7642.  08h    WORD    starting address of first  I/O block (0 = none)
  7643.  0Ah    WORD    starting address of second I/O block (0 = none)
  7644.  OCh    WORD    starting address of third  I/O block (0 = none)
  7645.  OEh    DWORD    start of first non-system memory block (0 = none)
  7646.  12h    WORD    size of first non-system memory block (in kilobytes)
  7647.  14h    DWORD    start of second non-system memory block (0 = none)
  7648.  18h    WORD    size of second non-system memory block (in kilobytes)
  7649.  1Ah    BYTE    implementation identifier of the device
  7650.  1Bh    BYTE    implementation revision level of the device
  7651. Note:    I/O block addresses and non-system memory addresses are listed in
  7652.       ascending order in each DDT entry.
  7653.  
  7654. Bitfields for DDT indicators:
  7655.  bit 15 reserved (0)
  7656.  bit 14 second arbitration level exists
  7657.  bit 13 first arbitration level exists
  7658.  bit 12 serial interface is RS-422
  7659.  bit 11 not address limited
  7660.  bit 10 DMA channel used
  7661.  bit 9    second arbitration level can be shared
  7662.  bit 8    first arbitration level can be shared
  7663.  bits 7-0 reserved (0)
  7664. --------B-15D102-----------------------------
  7665. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
  7666.     AX = D102h
  7667.     BX = entry number at which to start searching
  7668.     CX = requested I/O port address
  7669.     DX = 0000h (reserved, must be set to 0)
  7670.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  7671. Return:    AH = return code (see AX=D100h)
  7672.     BX = DDT entry number where I/O port was found, or total entries
  7673.          plus 1 if port was not found.
  7674.     CF set on error
  7675.     CF clear on success
  7676.         ES:DI buffer filled with DDT entry
  7677. Desc:    the DDT is searched from the specified entry for the I/O port in CX,
  7678.       and the first entry in which it is found is returned
  7679. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104h
  7680. --------B-15D103DX0000-----------------------
  7681. INT 15 - later PS/2s - RETURN ENTIRE DDT
  7682.     AX = D103h
  7683.     DX = 0000h (reserved, must be set to 0)
  7684.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  7685. Return:    AH = return code (see AX=D100h)
  7686.     CF set on error
  7687.     CF clear on success
  7688.         ES:DI buffer filled with DDT entry
  7689. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104h
  7690. --------B-15D104-----------------------------
  7691. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
  7692.     AX = D104h
  7693.     BX = entry number at which to start searching
  7694.     CX = requested device ID
  7695.     DX = 0000h (reserved, must be set to 0)
  7696.     ES:DI -> buffer to contain DDT entry (see AX=D101h for format)
  7697. Return:    AH = return code (see AX=D100h)
  7698.     BX = DDT entry number where device ID was found, or total entries
  7699.          plus 1 if port was not found.
  7700.     CF set on error
  7701.     CF clear on success
  7702.         ES:DI buffer filled with DDT entry
  7703. Desc:    the DDT is searched from the specified entry for the device ID in CX,
  7704.       and the first entry in which it is found is returned.
  7705. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h
  7706. --------B-15D2-------------------------------
  7707. INT 15 - later PS/2s - RESERVED
  7708.     AH = D2h
  7709.     ???
  7710. Return: ???
  7711. --------B-15D3-------------------------------
  7712. INT 15 - later PS/2s - RESERVED
  7713.     AH = D3h
  7714.     ???
  7715. Return: ???
  7716. --------B-15D4-------------------------------
  7717. INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
  7718.     AH = D4h
  7719.     DL = logical fixed disk drive number
  7720. Return:    AH = return code
  7721.         00h success
  7722.         01h specified logical drive number is invalid
  7723.         86h function not supported
  7724.         80h function not supported (on PCjr and PC)
  7725.     CF set on error
  7726.     CF clear on success
  7727.         AL = physical fixed disk drive number
  7728. --------B-15D5-------------------------------
  7729. INT 15 - later PS/2s - RESERVED
  7730.     AH = D5h
  7731.     ???
  7732. Return: ???
  7733. --------B-15D600BL00-------------------------
  7734. INT 15 - later PS/2s - READ BOOT DEVICE ID
  7735.     AX = D600h
  7736.     BL = 00h
  7737.     DX = device ID
  7738. Return: CF clear if successful
  7739.         AH = 00h
  7740.     CF set on error
  7741.         AH = status (86h for function not supported)
  7742. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602h
  7743. --------B-15D600BL01-------------------------
  7744. INT 15 - later PS/2s - WRITE BOOT DEVICE ID
  7745.     AX = D600h
  7746.     BL = 01h
  7747.     DX = device ID
  7748. Return: CF clear on success
  7749.         AH = 00h
  7750.     CF set on error
  7751.         AH = status (86h for function not supported)
  7752. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h
  7753. --------B-15D601BL00-------------------------
  7754. INT 15 - later PS/2s - READ BOOT DEVICE KEY
  7755.     AX = D601h
  7756.     BL = 00h
  7757.     DX = device ID
  7758. Return: CF clear on success
  7759.         AH = 00h
  7760.     CF set on error
  7761.         AH = status (86h for function not supported)
  7762. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602h
  7763. --------B-15D601BL01-------------------------
  7764. INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
  7765.     AX = D601h
  7766.     BL = 01h
  7767.     DX = device ID
  7768. Return: CF clear on success
  7769.         AH = 00h
  7770.     CF set on error
  7771.         AH = status (86h for function not supported)
  7772. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h
  7773. --------B-15D602-----------------------------
  7774. INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
  7775.     AX = D602h
  7776. Return: CF clear on success
  7777.         AH = 00h
  7778.         AL = status of reference-partition boot request
  7779.         00h boot not requested
  7780.         01h boot requested
  7781.     CF set on error
  7782.         AH = status (86h for function not supported)
  7783. SeeAlso: AX=D601h/BL=00h
  7784. --------X-15D800-----------------------------
  7785. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  7786.     AX = D800h
  7787.     CL = slot number (including embedded and virtual)
  7788. Return: CF clear if successful
  7789.         AH = 00h
  7790.     CF set on error
  7791.         AH = error code
  7792.         80h invalid slot number
  7793.         82h EISA CMOS corrupt
  7794.         83h empty slot
  7795.         86h invalid BIOS-FW function call
  7796.         87h invalid system configuration
  7797.     AL bit flags
  7798.         bit 7: set if duplicate IDs
  7799.         bit 6: set if product ID readable
  7800.         bits 4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  7801.         bits 0-3: duplicate ID number if bit 7 set
  7802.     BH = major revision level of configuration utility
  7803.     BL = minor revision level of configuration utility
  7804.     CX = checksum of configuration file
  7805.     DH = number of device functions
  7806.     DL = combined function information byte
  7807.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  7808. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  7809. SeeAlso: AX=D801h,AX=D804h
  7810. --------X-15D801-----------------------------
  7811. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  7812.     AX = D801h
  7813.     CH = function number to read
  7814.     CL = slot number (including embedded and virtual)
  7815.     DS:SI -> 320-byte buffer for standard configuration data block
  7816. Return: CF clear if successful
  7817.         AH = 00h
  7818.         DS:SI buffer filled
  7819.     CF set on error
  7820.         AH = error code
  7821.         80h invalid slot number
  7822.         81h invalid function number
  7823.         82h EISA CMOS corrupt
  7824.         83h empty slot
  7825.         86h invalid BIOS-FW function call
  7826.         87h invalid system configuration
  7827.     BX destroyed
  7828. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  7829. --------X-15D802-----------------------------
  7830. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  7831.     AX = D802h
  7832.     BH = EISA config utility major revision level
  7833.     BL = EISA config utility minor revision level
  7834. Return: CF clear if successful
  7835.         AH = 00h
  7836.     CF set on error
  7837.         AH = error code
  7838.         84h error clearing CMOS
  7839.         86h invalid BIOS-FW function call
  7840.         88h config utility version not supported
  7841. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  7842. SeeAlso: AX=D803h
  7843. --------X-15D803-----------------------------
  7844. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  7845.     AX = D803h
  7846.     CX = length of data structure (0000h = empty slot)
  7847.         includes two bytes for config file checksum
  7848.     DS:SI -> configuration data
  7849. Return: CF clear if successful
  7850.         AH = 00h
  7851.     CF set on error
  7852.         AH = error code
  7853.         84h error clearing CMOS
  7854.         85h EISA CMOS is full
  7855.         86h invalid BIOS-FW function call
  7856. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  7857. SeeAlso: AX=D802h
  7858. --------X-15D804-----------------------------
  7859. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  7860.     AX = D804h
  7861.     CL = slot number (including embedded and virtual)
  7862. Return: CF clear if successful
  7863.         AH = 00h
  7864.     CF set on error
  7865.         AH = error code
  7866.         80h invalid slot number
  7867.         83h empty slot
  7868.         86h invalid BIOS-FW function call
  7869.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  7870. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  7871. SeeAlso: AX=D800h
  7872. ----------15D8-------------------------------
  7873. INT 15 - Compaq EISA System ROM 04/08/93 - ??? API
  7874.     AH = D8h
  7875.     AL = function
  7876.         20h ???
  7877.         21h ???
  7878.         22h ???
  7879.         BL = 00h
  7880.         Return: CF set, AH = 86h if BL nonzero
  7881.         23h ???
  7882.         BL = 00h or 80h
  7883.         Return: CF set, AH = 86h if BL neither 00h nor 80h        
  7884.     ???
  7885. Return: ???
  7886. Note:    the Compaq "Caravel" supports functions 20h and 21h, even though it
  7887.       does not support any other EISA ROM functions and does not contain
  7888.       the EISA signature string
  7889. ----------15D8-------------------------------
  7890. INT 15 - Compaq EISA System ROM 04/08/93 - ??? API
  7891.     AH = D8h
  7892.     AL = function
  7893.         24h ???
  7894.         CX = ???
  7895.         ???
  7896.         25h ???
  7897.         CX = ???
  7898.         SI = ???
  7899.         DI = ???
  7900.         ???
  7901.         26h ???
  7902.         BX = ???
  7903.         SI = ???
  7904.         CX = size of ??? in bytes
  7905.     ???
  7906. Return: CF clear if successful
  7907.         ???
  7908.     CF set on error
  7909.         AH = 87h if ??? failed
  7910. Note:    these functions are only available if ??? from keyboard controller
  7911.       command C0h
  7912. --------X-15D8-------------------------------
  7913. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  7914.     AH = D8h
  7915.     AL = 80h to 84h
  7916.     other registers as appropriate for AL=00h to 04h
  7917. Return: as appropriate for AL=00h to 04h
  7918. Note:    these functions are identical to AX=D800h to D804h, except that they
  7919.       should be called when using 32-bit CS addressing mode (pointers use
  7920.       ESI rather than SI as offset) instead of 16-bit addressing mode
  7921. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  7922. ----------15D8-------------------------------
  7923. INT 15 - Compaq EISA System ROM 04/08/93 - 32-bit CS ADDRESSING MODE CALLS
  7924.     AH = D8h
  7925.     AL = A0h to A6h
  7926.     other registers as appropriate for AL=20h to 26h
  7927. Return: as appropriate for AL=20h to 26h
  7928. Note:    these functions are identical to AX=D820h to D826h, except that they
  7929.       should be called when using 32-bit CS addressing mode
  7930. --------Q-15DE00-----------------------------
  7931. INT 15 - DESQview - GET PROGRAM NAME
  7932.     AX = DE00h
  7933. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  7934.         the "Switch Windows" menu (see below)
  7935. Note:    always returns AX=0000h under DESQview/X
  7936. SeeAlso: AX=DE07h
  7937.  
  7938. Format of program entry in DESQVIEW.DVO:
  7939. Offset    Size    Description
  7940.  00h    BYTE    length of name (FFh if end of file)
  7941.  01h  N BYTEs    name
  7942.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  7943.     BYTE    program type
  7944.         00h normal program
  7945.         04h divider
  7946.         80h Delete a Program
  7947.         81h Change a Program
  7948.     WORD    ??? apparently always 0000h
  7949. --------Q-15DE01-----------------------------
  7950. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  7951.     AX = DE01h
  7952. Return: nothing
  7953. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  7954.     NOP for DESQview/X
  7955. --------Q-15DE02-----------------------------
  7956. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  7957.     AX = DE02h
  7958. Return: nothing
  7959. Note:    this call is a NOP in DV 2.x
  7960. SeeAlso: AX=DE03h
  7961. --------Q-15DE03-----------------------------
  7962. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  7963.     AX = DE03h
  7964. Return: AX = ??? for current window
  7965.     BX = ??? for current window
  7966. Note:    this call is a NOP in DV 2.x
  7967. SeeAlso: AX=DE02h
  7968. --------Q-15DE04-----------------------------
  7969. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  7970.     AX = DE04h
  7971. Return: BX = bytes of common memory available
  7972.     CX = largest block available
  7973.     DX = total common memory in bytes
  7974. SeeAlso: AX=DE05h,AX=DE06h
  7975. --------Q-15DE05-----------------------------
  7976. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  7977.     AX = DE05h
  7978. Return: BX = KB of memory available
  7979.     CX = largest block available
  7980.     DX = total conventional memory in KB
  7981. SeeAlso: AX=DE04h,AX=DE06h
  7982. --------Q-15DE06-----------------------------
  7983. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  7984.     AX = DE06h
  7985. Return: BX = KB of expanded memory available
  7986.     CX = largest block available
  7987.     DX = total expanded memory in KB
  7988. SeeAlso: AX=DE04h,AX=DE05h
  7989. --------Q-15DE07-----------------------------
  7990. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  7991.     AX = DE07h
  7992. Return: AX = number of program as it appears on the "Switch Windows" menu
  7993. Note:    this API call may be made from a hardware interrupt handler
  7994. SeeAlso: AX=DE00h
  7995. --------Q-15DE08-----------------------------
  7996. INT 15 - DESQview - GET ???
  7997.     AX = DE08h
  7998. Return: AX = 0000h if ??? is not set to the current task
  7999.          0001h if ??? is set to the current task
  8000. --------Q-15DE09-----------------------------
  8001. INT 15 - DESQview - UNIMPLEMENTED
  8002.     AX = DE09h
  8003. Return: nothing (NOP in DV 1.x and 2.x)
  8004. --------Q-15DE0A-----------------------------
  8005. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  8006.     AX = DE0Ah
  8007.     BL = character
  8008. Return: character displayed, next call will display in next position (which
  8009.     wraps back to the start of the line if off the right edge of screen)
  8010. Notes:    displays character on bottom line of *physical* screen, regardless
  8011.       of current size of window (even entirely hidden)
  8012.     does not know about graphics display modes, just pokes the characters
  8013.       into display memory
  8014.     this API call may be made from a hardware interrupt handler
  8015. SeeAlso: AX=1003h
  8016. --------Q-15DE0B-----------------------------
  8017. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  8018.     AX = DE0Bh
  8019.     BL = API level minor version number
  8020.     BH = API level major version number
  8021. Return: AX = maximum API level (AH = major, AL = minor)
  8022. Notes:    if the requested API level is greater than the version of DESQview, a
  8023.       "You need a newer version" error window is popped up
  8024.     the API level defaults to 1.00, and is inherited by child tasks
  8025. --------Q-15DE0C-----------------------------
  8026. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  8027.     AX = DE0Ch
  8028.     BX = number of bytes
  8029. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  8030. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  8031.       system memory
  8032. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  8033. --------Q-15DE0D-----------------------------
  8034. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  8035.     AX = DE0Dh
  8036.     ES:DI -> previously allocated block
  8037. Return: nothing
  8038. SeeAlso: AX=1002h,AX=DE0Ch
  8039. --------Q-15DE0E-----------------------------
  8040. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  8041.     AX = DE0Eh
  8042.     ES:DI -> name to find
  8043.     CX = length of name
  8044. Return: BX = 0000h not found
  8045.          0001h found
  8046.         DS:SI = object handle
  8047. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  8048.  
  8049. Special mailbox names:
  8050.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  8051.  "DESQview/X Help Engine"
  8052.  "DESQview/X Network Server"  Network Manager
  8053.  "DESQview X Server0"    X-Windows server
  8054.  "DESQview X Server7"    X-Windows printing service
  8055.  "INBOX"        DESQview/X LPD requests
  8056.  "OUTBOX"        DESQview/X LPD responses
  8057.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  8058.  "_DVNM_"        DV/X v1.10 network manager
  8059. --------Q-15DE0F-----------------------------
  8060. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  8061.     AX = DE0Fh
  8062. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  8063. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  8064.     enables an additional mouse mode
  8065. --------Q-15DE10-----------------------------
  8066. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  8067.     AX = DE10h
  8068.     BH = scan code
  8069.     BL = character
  8070. Return: nothing
  8071. Notes:    a later read will get the keystroke as if it had been typed by the user
  8072.     multiple pushes are read last-in first-out
  8073.     if a script exists for the pushed key in the current application, the
  8074.       script will be executed
  8075.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  8076. SeeAlso: INT 16/AH=05h
  8077. --------Q-15DE11BL00-------------------------
  8078. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  8079.     AX = DE11h
  8080.     BL = 00h      viewport will not move automatically
  8081.          nonzero  viewport will move to keep cursor visible (default)
  8082. Return: nothing
  8083. --------Q-15DE12BX0000-----------------------
  8084. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  8085.     AX = DE12h
  8086.     BX = 0000h    select normal style (linefeed only moves down)
  8087.          nonzero  select C style (linefeed moves to start of next line)
  8088. Return: nothing
  8089. Note:    set on a per-task basis, and inherited from the parent task
  8090. --------Q-15DE13-----------------------------
  8091. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  8092.     AX = DE13h
  8093. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  8094.          without matching ENDC (see INT 15/AX=101Ch)
  8095. Note:    this API call may be made from within a hardware interrupt handler
  8096. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  8097. --------Q-15DE14-----------------------------
  8098. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  8099.     AX = DE14h
  8100.     ES:DI -> object
  8101. Return: BL = 00h not an object
  8102.          08h window or task
  8103.          09h mailbox
  8104.          0Ah keyboard
  8105.          0Bh timer
  8106.          0Ch objectq
  8107.          0Fh pointer
  8108.          10h panel
  8109. SeeAlso: AX=1016h
  8110. --------Q-15DE15-----------------------------
  8111. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  8112.     AX = DE15h
  8113.     BL = error handling mode
  8114.         00h post system error on all error conditions
  8115.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  8116.         messages sent to mailboxes which fail due to lack of system
  8117.         or common memory
  8118.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  8119.         calls which fail due to lack of system memory
  8120. Return: nothing
  8121. SeeAlso: AX=DE0Ch,AX=DE16h
  8122. --------Q-15DE16-----------------------------
  8123. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  8124.     AX = DE16h
  8125. Return: BL = current mode
  8126.         00h always post system error
  8127.         01h return carry flag set on failed mailbox writes
  8128.         02h return CF set on failed mailbox writes and NULL on failed
  8129.         GETMEM calls
  8130. SeeAlso: AX=DE15h
  8131. --------Q-15DE17-----------------------------
  8132. INT 15 - DESQview v2.20-2.25 - reserved
  8133.     AX = DE17h
  8134. Return: pops up "Programming error" window
  8135. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  8136. SeeAlso: AX=1117h
  8137. --------Q-15DE17-----------------------------
  8138. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  8139.     AX = DE17h
  8140.     BX = function
  8141.         0000h   get current mapping context without setting
  8142.         nonzero set new mapping context to BX
  8143. Return: BX = mapping context in effect before call
  8144. Notes:    mapping contexts determine conventional-memory addressability; setting
  8145.       a mapping context ensures that the associated program and data areas
  8146.       are in memory for access.  Usable by drivers, TSRs and shared
  8147.       programs.
  8148.     caller need not be running under DESQview
  8149.     this API call may be made from a hardware interrupt handler
  8150. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  8151. --------Q-15DE18-----------------------------
  8152. INT 15 - DESQview v2.20+ - internal - ???
  8153.     AX = DE18h
  8154.     BP = function number
  8155.         high byte must be 10h
  8156.         low byte is function
  8157.         00h set ???
  8158.             BL = ???  (00h-10h, video mode???)
  8159.             BH = value to store
  8160.         03h set ???
  8161.             BL = ??? (stored in driver)
  8162.         0Ah get ???
  8163.             ES:DI -> 18-byte buffer to hold ???
  8164. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  8165. --------Q-15DE19-----------------------------
  8166. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  8167.     AX = DE19h
  8168.     BX = number of bytes to allocate
  8169. Return: AX = 0000h successful
  8170.         ES:DI -> allocated block
  8171.          nonzero insufficient memory
  8172. Note:    this API call may be made from within a hardware interrupt handler
  8173. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  8174. --------Q-15DE1A-----------------------------
  8175. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  8176.     AX = DE1Ah
  8177.     ES:DI -> previously allocated block
  8178. Return:    AX = 0000h (successful)
  8179. Note:    this function may be called from within a hardware interrupt handler
  8180. SeeAlso: AX=DE0Dh,AX=DE19h
  8181. --------Q-15DE1B-----------------------------
  8182. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  8183.     AX = DE1Bh
  8184. Return: nothing
  8185. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  8186. --------Q-15DE1C-----------------------------
  8187. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  8188.     AX = DE1Ch
  8189. Return: nothing
  8190. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  8191.       that DOS is free
  8192.     the official documentation states that this call should be paired with
  8193.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  8194.     this API call may be made from within a hardware interrupt handler
  8195. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  8196. --------Q-15DE1D-----------------------------
  8197. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  8198.     AX = DE1Dh
  8199.     DX = segment of handle for task to receive keystroke
  8200.     BL = character
  8201.     BH = scan code
  8202. Return: AX = 0000h if successful
  8203.        nonzero if receiver's keyboard buffer was full
  8204. Notes:    the key is treated as though the user had pressed it, ignoring any
  8205.       script which may be bound to the key, and using the current field
  8206.       table if the keyboard object is in field processing mode
  8207.     multiple PUTKEYs are seen in the order in which they are executed
  8208. SeeAlso: AX=DE10h
  8209. --------Q-15DE1E-----------------------------
  8210. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  8211.     AX = DE1Eh
  8212. Return: CL = actual number of rows on screen
  8213.     CH = actual number of columns on screen
  8214.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  8215. Note:    this API call may be made from a hardware interrupt handler
  8216. SeeAlso: INT 10/AH=0Fh
  8217. --------Q-15DE1F-----------------------------
  8218. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  8219.     AX = DE1Fh
  8220. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  8221. Note:    this API call may be made from within a hardware interrupt handler
  8222. SeeAlso: AX=DE13h,INT 21/AH=34h
  8223. --------Q-15DE20-----------------------------
  8224. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  8225.     AX = DE20h
  8226.     BX = segment of handle of task to interupt
  8227.     DX:CX -> FAR interrupt routine
  8228.     BP,SI,DI,DS,ES as required by interrupt routine
  8229. Return: nothing
  8230. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  8231.       making the DISPATCHINT call
  8232.     multiple "DISPATCHINT" calls are processed in the order in which they
  8233.       were executed
  8234.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  8235.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  8236.       needs to be preserved
  8237.     this API call may be made from within a hardware interrupt handler
  8238. SeeAlso: AX=1021h,AX=DE2Ah
  8239. --------Q-15DE21-----------------------------
  8240. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  8241.     AX = DE21h
  8242.     BX = new state
  8243.         0000h turn off
  8244.         nonzero turn on
  8245. Return: BX = old state of virtualization
  8246. Notes:    this API call may be made from within a hardware interrupt handler
  8247.     under DV 2.40 and 2.42, this call appears to have no effect and always
  8248.       returns a nonzero value in BX which appears to be the offset within
  8249.       the DV common memory segment of the caller's task object; it may
  8250.       only have an effect within a hardware interrupt handler
  8251. SeeAlso: AX=1117h,AX=DE17h
  8252. --------Q-15DE22-----------------------------
  8253. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  8254.     AX = DE22h
  8255.     DX = segment of task handle
  8256. Return: DX = total amount of memory in paragraphs
  8257.     BX = amount of system memory in paragraphs
  8258.     CX = largest block of system memory available in paragraphs
  8259.     AX = flags
  8260.         bit 0: system memory resides in shared memory
  8261.         bit 1: process's memory is swapped out
  8262.         bit 2: process's system memory is swapped out
  8263. Notes:    if the task handle is a child task, the returned values will be for the
  8264.       process containing the task, rather than the task itself
  8265.     if the process's system memory is swapped out, BX,CX,DX remain
  8266.       unchanged, because the memory usage cannot be determined
  8267. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  8268. --------Q-15DE23-----------------------------
  8269. INT 15 U - DESQview v2.31+ - ???
  8270.     AX = DE23h
  8271.     BX = ??? IRQ number on first PIC?
  8272.     CX = ??? IRQ number on second PIC?
  8273. Return: ???
  8274. Note:    called by QEMM 6.00+
  8275. --------Q-15DE24-----------------------------
  8276. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  8277.     AX = DE24h
  8278.     BX = length of .DVP data
  8279.     CX = length of ??? string
  8280.     DS:SI -> ??? string
  8281.     ES:DI -> .DVP data (see AX=102Ch)
  8282. Return: BX = segment of task handle??? or 0000h on error
  8283. Note:    this call is similar to AX=102Ch except that it can interpret the
  8284.       extended DVP data
  8285. SeeAlso: AX=102Ch
  8286. --------Q-15DE25-----------------------------
  8287. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  8288.     AX = DE25h
  8289.     ES:DI -> 67-byte buffer for ASCIZ directory name
  8290. Return: ES:DI buffer filled with directory from which DESQview was started
  8291. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  8292.       name, so if the buffer is not cleared to zeros before the call,
  8293.       there is no way to tell where the directory name ends.  This bug
  8294.       has been fixed in DV 2.52 (DV/X 1.02)
  8295. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  8296. --------Q-15DE26-----------------------------
  8297. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  8298.     AX = DE26h
  8299. Return: BX = segment of handle for task with keyboard focus
  8300. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  8301.       "direct" window is active
  8302. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  8303. --------Q-15DE27-----------------------------
  8304. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  8305.     AX = DE27h
  8306.     BX = type
  8307.         0000h process
  8308.         0001h task
  8309.     ES:DI -> list of Instance Item Structures (see below)
  8310. Return: CF clear if successful
  8311.         AX = ???
  8312.         BX = ???
  8313.     CF set on error
  8314.         AX = error code???
  8315.         0004h invalid BX value
  8316. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8317. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  8318.  
  8319. Format of Instance Item Structure [one element of list]:
  8320. Offset    Size    Description
  8321.  00h    WORD    length of data area DESQview should save and restore on context
  8322.         switches (0000h = end of list)
  8323.  02h    DWORD    pointer to area to be saved/restored
  8324. --------Q-15DE28-----------------------------
  8325. INT 15 U - DESQview v2.50+ - ???
  8326.     AX = DE28h
  8327.     BX = segment of ??? or 0000h for default
  8328.     ???
  8329. Return: ???
  8330. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8331. SeeAlso: AX=DE2Ah
  8332. --------Q-15DE29BX0000-----------------------
  8333. INT 15 U - DESQview/X - ???
  8334.     AX = DE29h
  8335.     BX = 0000h
  8336.     ???
  8337. Return: CF clear if successful
  8338.         ???
  8339.     CF set on error
  8340. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8341.     under DESQview 2.60, this function and all other subfunctions of
  8342.       AX=DE29h always return CF set, as they are unique to DESQview/X
  8343. --------Q-15DE29BX0001-----------------------
  8344. INT 15 U - DESQview/X - ???
  8345.     AX = DE29h
  8346.     BX = 0001h
  8347.     DX = segment of window handle
  8348. Return: CF clear if successful
  8349.         AX = ???
  8350.         DX = ???
  8351.     CF set on error
  8352. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8353. --------Q-15DE29BX0002-----------------------
  8354. INT 15 U - DESQview/X - ???
  8355.     AX = DE29h
  8356.     BX = 0002h
  8357.     DX = segment of window handle
  8358. Return: CF clear if successful
  8359.         AX = ???
  8360.         DX = ???
  8361.     CF set on error
  8362. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8363. --------Q-15DE29BX0003-----------------------
  8364. INT 15 U - DESQview/X - ???
  8365.     AX = DE29h
  8366.     BX = 0003h
  8367.     DX = segment of window handle
  8368. Return: CF clear if successful
  8369.         ???
  8370.     CF set on error
  8371. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8372. --------Q-15DE29BX0004-----------------------
  8373. INT 15 U - DESQview/X - GET DISPLAY NAME
  8374.     AX = DE29h
  8375.     BX = 0004h
  8376.     CX = size of buffer in bytes
  8377.     DX = segment of window handle
  8378.     ES:DI -> buffer for display name
  8379. Return: CF clear if successful
  8380.         buffer filled with ASCIZ display name (truncated if necessary) or
  8381.           null string if no display
  8382.     CF set on error
  8383. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8384.     the name ":0" refers to the local display
  8385. --------Q-15DE29BX0005-----------------------
  8386. INT 15 U - DESQview/X - ???
  8387.     AX = DE29h
  8388.     BX = 0005h
  8389.     ???
  8390. Return: CF clear if successful
  8391.         ???
  8392.     CF set on error
  8393. Note:    under DESQview 2.60, this function and all other subfunctions of
  8394.       AX=DE29h always return CF set, as they are unique to DESQview/X
  8395. --------Q-15DE2A-----------------------------
  8396. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  8397.     AX = DE2Ah
  8398.     BX = segment of handle for task to interrupt or 0000h for caller
  8399.     DX:CX -> interrupt routine
  8400.     BP,SI,DI,DS,ES as required by interrupt routine
  8401. Return: nothing
  8402. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8403.     this call is the same as AX=DE20h except that it will delay
  8404.       interrupting the specified task until after it has exited DOS
  8405. SeeAlso: AX=1021h,AX=DE20h
  8406. --------Q-15DE2B-----------------------------
  8407. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  8408.     AX = DE2Bh
  8409.     ES:DI -> starting object
  8410.         0000h:0000h for first object in list???
  8411. Return: AX = status
  8412.         0000h successful
  8413.         ES:DI -> next object of same type (window/non-window)
  8414.         0001h failed (ES:DI was not a valid handle)
  8415. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8416.     there are two separate lists, one for window/task objects and one
  8417.       for all other objects
  8418. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  8419. --------Q-15DE2C-----------------------------
  8420. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  8421.     AX = DE2Ch
  8422.     DX = window information format version (0100h for DESQview 2.5x)
  8423.     BX = segment of window handle or 0000h for default
  8424.     ES:DI -> buffer for window information (see below)
  8425. Return: AX = status
  8426.         0000h successful
  8427. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8428. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  8429.  
  8430. Format of window information:
  8431. Offset    Size    Description
  8432.  00h    BYTE    task flag: 00h window, 01h task
  8433.  01h    BYTE    process number if owner task
  8434.         00h if non-owner task
  8435.  02h    WORD    segment of owner's handle, 0000h if orphaned
  8436.  04h    WORD    mapping context (see AX=1016h)
  8437.  06h    BYTE    task status (see below)
  8438.  07h    BYTE    unused
  8439.  08h    WORD    status bits (see below)
  8440.  0Ah    BYTE    01h if foreground-only window
  8441.  
  8442. Values for task status:
  8443.  00h    "Waiting" waiting for input
  8444.  01h    "Idle" keyboard poll limit reached
  8445.  03h    same as 01h
  8446.  04h    "Pausing" INT 15/AX=1000h pause called
  8447.  04h    DV/X direct: user did something to allow task switch
  8448.  05h    "ModeChg" video mode about to be changed
  8449.  06h    "ModeNtf" notify that video mode changed
  8450.  07h    "MoniCh" requested change to other monitor
  8451.  08h    "StartPgm" control relinquished to start new process
  8452.  09h    "MgrCan" made window manager CANCEL command
  8453.  0Ah    "Slicing" time slice expired
  8454.  0Bh    "Exit DOS" notify on DOS calls
  8455.  0Ch    "Enter DOS" process is re-entering DOS
  8456.  0Dh    "Terminate" INT 21/AH=4Ch or task freed
  8457.  0Eh    "BrkNxt" Control-Break pressed
  8458.  0Fh    "MgrCol" keyboard focus taken away
  8459.  10h    "PgmInt" interrupted by API call from another task
  8460.  11h    "BldOpen" call to INT 15/AX=DE01h
  8461.  
  8462. Bitfields for status bits:
  8463.  bit 0    DESQview process
  8464.  bit 1    process swapped out
  8465.  bit 2    process is resized direct window (suspended)
  8466.  bit 3    process suspended itself
  8467.  bit 4    user suspended process
  8468.  bit 5    process is being created
  8469.  bit 6    task is freeing another task
  8470. --------Q-15DE2D-----------------------------
  8471. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  8472.     AX = DE2Dh
  8473.     CX = direction
  8474.         FFFFh set socket handler
  8475.         DX:BX -> FAR function for socket interface
  8476.             must be of the format described under INT 63"DESQview"
  8477.         other get socket handler
  8478.         Return: DX:BX -> socket handler
  8479. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8480.     the "set" subfunction is normally called only by SOCKET.DVR
  8481. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  8482. --------Q-15DE2E-----------------------------
  8483. INT 15 U - DESQview v2.50+ - SOCKET API
  8484.     AX = DE2Eh
  8485.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  8486. Return: CX = size of socket record in bytes
  8487.     DX:BX -> socket record which was used
  8488. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8489.     socket records are allocated from common memory
  8490.     for Unix compatibility, each socket and connection on a socket is
  8491.       allocated a DOS file handle (referencing an SFT for NUL) which is
  8492.       used on various calls to specify which of possibly multiple
  8493.       connections is to be operated upon
  8494. SeeAlso: AX=DE2Dh,INT 61/AX=0001h"VINES",INT 63"DESQview"
  8495.  
  8496. Values for function number:
  8497.  0000h    initialize socket???
  8498.  0001h    "gethostname"
  8499.  0002h    "ioctl" check for input
  8500.  0003h    "sleep" delay for specified period
  8501.  0004h    "htons" convert word to network (big-endian) byte order
  8502.  0005h    "select"
  8503.  0006h    "bsd_close"/"so_close" close socket
  8504.  0007h    NOP
  8505.  0008h    "connect" initiate connection on socket
  8506.  0009h    "recv"/"recvfrom" read from socket
  8507.  000Ah    "socket"
  8508.  000Bh    ???
  8509.  000Ch    "gethostbyname"
  8510.  000Dh    "send"/"sendto" write to socket
  8511.  000Eh    ??? (does something to all connections for process)
  8512.  000Fh    "getpid" get process identifier
  8513.  0010h    "gettimeofday"
  8514.  0011h    "bind" assign name to socket
  8515.  0012h    "listen" listen for connections on socket
  8516.  0013h    "accept" accept connection on socket
  8517.  0014h    connect to X server
  8518.  0015h    "gethostbyaddr" get host information for an address
  8519.  0016h    "getprotobyname"
  8520.  0017h    "getprotobynumber"
  8521.  0018h    "getservbyname"
  8522.  0019h    "getservbyport"
  8523.  001Ah    "getsockname" determine name bound to socket
  8524.  001Bh    "getpeername" get name of connected peer
  8525.  001Ch    "getsockopt"/"setsockopt"
  8526.  001Dh    "so_exit"     close all sockets for calling process
  8527.  001Eh    "issock" determine whether file handle references socket
  8528.  001Fh    "so_attach" reattach previously detached socket
  8529.  0020h    "so_detach" temporarily detach socket
  8530.  0021h    get DESQview directory
  8531.  0022h    "NewProc" start new application (see AX=102Ch)
  8532.  0023h    "so_linkup"
  8533.  0024h    canonicalize filename
  8534.  0025h    indirect INT 15h call
  8535.  0026h    Network Manager interface
  8536.  0027h    "so_unlink"    close connection from "so_linkup"
  8537.  0028h    "raisepriority"
  8538.  0029h    "lowerpriority"
  8539.  002Ah    ???
  8540.  FFFFh    "NetExit" (appears to be a NOP)
  8541.  
  8542. Format of socket record:
  8543. Offset    Size    Description
  8544.  00h    WORD    signature F0ADh
  8545.  02h    WORD    function number (see above)
  8546.  04h    WORD    returned error code (see below)
  8547.  06h    WORD    maximum message size??? (usually 0400h)
  8548.  08h    WORD    PSP segment to use or 0000h if socket not valid
  8549.  0Ah    WORD    scratch space (JFT size)
  8550.  0Ch    DWORD    scratch space (JFT address)
  8551.  10h    DWORD    mailbox handle (initialized by function 0000h)
  8552.  14h    DWORD    timer object handle (initialized by function 0000h)
  8553. ---function 0000h---
  8554.  18h    WORD    (return) ???
  8555. ---function 0001h---
  8556.  18h    WORD    (return) status???
  8557.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  8558.  9Ah    WORD    maximum length of hostname to return
  8559. ---function 0002h---
  8560.  18h    WORD    (return) status
  8561.  1Ah    WORD    socket's file handle
  8562.  1Ch    WORD    IOCTL function
  8563.         05h "FIONREAD" determine available input
  8564.         06h "FIONBIO" set blocking state of socket
  8565.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  8566.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  8567. ---function 0003h---
  8568.  18h  2 BYTEs    unused
  8569.  1Ah    WORD    delay time in seconds
  8570. ---function 0004h---
  8571.  18h    WORD    (return) result in network (big-endian) byte order
  8572.  1Ah    WORD    value to convert to network byte order
  8573. ---function 0005h---
  8574.  18h    WORD    (return) number of handles meeting the specified conditions???
  8575.  1Ah    WORD    number of file handles in each bitset???
  8576.  1Ch    DWORD    bitset of socket handles to check for readability???
  8577.  20h    DWORD    bitset of socket handles to check for writability???
  8578.  24h    DWORD    bitset of socket handles to check for errors???
  8579.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  8580.  2Ah    DWORD    ???
  8581.  2Eh    DWORD    ???
  8582. ---function 0006h---
  8583.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8584.  1Ah    WORD    socket's file handle
  8585. ---function 0008h---
  8586.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8587.  1Ah    WORD    socket's file handle
  8588.  1Ch    WORD    0001h if socket name specified, 0000h if not
  8589.  1Eh    WORD    length of socket name
  8590.  20h  N BYTEs    name of socket to which to connect
  8591. ---function 0009h---
  8592.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  8593.             closed, or FFFFh on error
  8594.  1Ah    WORD    socket's file handle
  8595.  1Ch    WORD    number of bytes to read
  8596.  1Eh    WORD    flags
  8597.  20h    WORD    0000h if no source address desired
  8598.         0001h if source address is to be stored (datagram sockets)
  8599.  22h    WORD    length of source address
  8600.  24h 110 BYTEs    source address
  8601.  92h 1K BYTEs    buffer for data to be read
  8602. ---function 000Ah---
  8603.  18h    WORD    (return) socket's file handle or FFFFh on error
  8604.  1Ah    WORD    address family (0001h,0002h)
  8605.  1Ch    WORD    socket type
  8606.  1Eh    WORD    protocol
  8607. ---function 000Bh---
  8608.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  8609.  1Ah    WORD    socket's file handle
  8610.  1Eh    WORD    (call) ???
  8611. ---function 000Ch---
  8612.  18h 128 BYTEs    buffer containing ASCIZ hostname
  8613.         special case if empty string or "unix"
  8614.  98h    ???    'struct hostent' ???
  8615.  A2h    ???    (return) ???
  8616. ---function 000Dh---
  8617.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  8618.  1Ah    WORD    socket's file handle
  8619.  1Ch    WORD    number of bytes to write
  8620.  1Eh    WORD    number of bytes to follow in subsequent writes???
  8621.  20h    WORD    flags
  8622.  22h    WORD    0000h if no destination specified, 0001h if destination present
  8623.  24h    WORD    ???
  8624.  26h    WORD    length of destination address
  8625.  28h 110 BYTEs    destination address
  8626.  96h 1K BYTEs    buffer containing data to be written
  8627. ---function 000Eh---
  8628.  no additional fields
  8629. ---function 000Fh---
  8630.  18h    DWORD    (return) DESQview task handle of calling process
  8631. ---function 0010h---
  8632.  18h    DWORD    (return) current time
  8633.  1Ch    DWORD    (return) ???
  8634. ---function 0011h---
  8635.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8636.  1Ah    WORD    socket's file handle
  8637.  1Ch    WORD    length of name
  8638.  1Eh  N BYTEs    buffer for socket name
  8639. ---function 0012h---
  8640.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8641.  1Ah    WORD    socket's file handle
  8642.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  8643. ---function 0013h---
  8644.  18h    WORD    (return) file handle for new connection or FFFFh on error
  8645.  1Ah    WORD    listen()ing socket's file handle
  8646.  1Ch    WORD    (call) length of buffer for connecting entity's address
  8647.         (return) actual length of address
  8648.  1Eh  N BYTEs    buffer for connecting entity's address
  8649. ---function 0014h---
  8650.  18h    WORD    (return) socket's file handle or FFFFh on error
  8651.  1Ah  4 BYTEs    (return) ???
  8652.  1Eh    WORD    (return) ???
  8653.  20h    WORD    (return) ???
  8654.  22h 256 BYTEs    ASCIZ X display name
  8655. 122h    ???
  8656. ---function 0015h---
  8657.  18h    WORD    (call) type of address??? (test for 0001h seen)
  8658.  1Ah    WORD    (call) length of buffer for host address
  8659.  1Ch 110 BYTEs    buffer containing host address
  8660.  8Ah    WORD    (return) offset of official host name???
  8661.  8Ch    WORD    (return) offset of alias list???
  8662.  8Eh    WORD    (return) address type???
  8663.  90h    WORD    (return) length of an address in bytes???
  8664.  92h    WORD    (return) offset of address???
  8665.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  8666. ---function 0016h---
  8667.  18h    ???    buffer for protocol name???
  8668.  98h    ???
  8669. ---function 0017h---
  8670.  18h    WORD    (call) protocol number???
  8671.  1Ah    WORD    (return) ??? or 0001h
  8672. ---function 0018h---
  8673.  18h 128 BYTEs    buffer containing ???
  8674.  98h 128 BYTEs    buffer containing ???
  8675. 118h    WORD    (return) ???
  8676. ---function 0019h---
  8677.  18h    WORD    length of name???
  8678.  1Ah 128 BYTEs    buffer for name???
  8679.  9Ah    WORD    (return) ???
  8680. ---function 001Ah---
  8681.  18h    WORD    (return) 0000h if successful, FFFFh on error
  8682.  1Ah    WORD    socket's file handle
  8683.  1Ch    WORD    (call) length of buffer for socket name
  8684.         (return) actual length of socket name
  8685.  1Eh  N BYTEs    buffer for socket name
  8686. ---function 001Bh---
  8687.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8688.  1Ah    WORD    socket's file handle
  8689.  1Ch    WORD    (call) size of buffer for name
  8690.         (return) actual size of name
  8691.  1Eh  N BYTEs    buffer for peer's name
  8692. ---function 001Ch---
  8693.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8694.  1Ah    WORD    direction: 0000h to get, 0001h to set
  8695.  1Ch    WORD    socket's file handle
  8696.  1Eh    WORD    option level
  8697.  20h    WORD    option name
  8698.  22h    WORD    (call) length of buffer for option value
  8699.         (return) actual length of option value
  8700.  24h  N BYTEs    buffer for option value
  8701. ---function 001Dh---
  8702.  no additional fields
  8703. ---function 001Eh---
  8704.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  8705.  1Ah    WORD    file handle which may or may not be a socket
  8706. ---function 001Fh---
  8707.  18h    WORD    (return) file handle or FFFFh on error
  8708.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  8709.             previously detached socket
  8710. ---function 0020h---
  8711.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  8712.  1Ah    WORD    socket's file handle
  8713.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  8714.             the file handle
  8715. ---function 0021h---
  8716.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  8717. ---function 0022h---
  8718.  18h    DWORD    (return) task handle of new application
  8719.  1Ch    WORD    size of .DVP data
  8720.  1Eh 129 BYTEs    ASCIZ ???
  8721.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  8722. ---function 0023h---
  8723.  18h    WORD    (return) ??? or FFFFh on error
  8724.  1Ah    WORD    socket's file handle???
  8725. ---function 0024h---
  8726.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  8727.             0000h if successful
  8728.  1Ah 129 BYTEs    ASCIZ filename/pathname
  8729. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  8730. ---function 0025h---
  8731.  18h    WORD    value of AX
  8732.  1Ah    WORD    value of BX
  8733.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  8734.         (call) number of stack parameters if AH value is 12h
  8735.         (return) returned CX for calls other than INT 15/AH=12h
  8736.  1Eh    WORD    value of DX
  8737.  20h    WORD    value of DI
  8738.  22h    WORD    value of SI
  8739.  24h    WORD    value of DS
  8740.  26h    WORD    value of ES
  8741.  28h    WORD    (return) value of FLAGS after call
  8742.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  8743.         (return) stack results from INT 15/AH=12h call
  8744. ---function 0026h---
  8745.  18h    WORD    (call) Network Manager subfunction (see below)
  8746.         (return) status???
  8747.  1Ah    WORD    (call) size of parameter data
  8748.         (return) size of returned data
  8749.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  8750.         (return) result data (see below)
  8751. ---function 0027h---
  8752.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  8753.  1Ah    WORD    socket's file handle
  8754. ---functions 0028h,0029h---
  8755.  18h    WORD    (call) file handle for which to set priority low/high
  8756.             FFFFh to change calling task's priority
  8757. ---function 002Ah---
  8758.  no additional fields
  8759.  
  8760. Values for Network Manager subfunction:
  8761.  0004h    "so_exit"???
  8762.  0005h    "gethostbyname"
  8763.  0006h    "gethostname"
  8764.  0009h    "socket"
  8765.  000Dh    "gethostbyaddr"
  8766.  000Fh    "getprotobyname"
  8767.  0010h    get protocol name for protocol number
  8768.  0011h    "getservbyname"
  8769.  0012h    "getservbyport"
  8770.  0013h    "getsockname"???
  8771.  0016h    ???
  8772.  0017h    kill Network Manager
  8773.  0018h    "getpeername"???
  8774.  0019h    ??? (called by socket function 0000h)
  8775.  001Ah    ???
  8776.  001Bh    "so_linkup"
  8777.  001Dh    get network services
  8778.  001Fh    "getpwuid"
  8779.  0020h    "getpwnam"
  8780.  0021h    "getpwvar"
  8781.  0022h    "crypt"
  8782.  0023h    "so_unlink"
  8783.  0024h    "getlogin"
  8784.  0028h    "sethostent"
  8785.  0029h    "gethostent"
  8786.  002Ah    "soaddhost"
  8787.  002Bh    "soupdatehost"
  8788.  002Ch    "sodeletehost"
  8789.  002Dh    "setservent"
  8790.  002Eh    "getservent"
  8791.  002Fh    "setpwent"
  8792.  0030h    "getpwent"
  8793.  0031h    ???
  8794.  0032h    ???
  8795.  0033h    ???
  8796.  0034h    get IP network number
  8797.  0035h    ??? (pops up Network Manager window)
  8798.  0037h    ???
  8799.  0038h    get machine name and IP address
  8800.  0039h    ???
  8801.  
  8802. Format of Function 0026h/Subfunction 000Fh data:
  8803. Offset    Size    Description
  8804.  00h  8 BYTEs    (return) ???
  8805.  
  8806. Format of Function 0026h/Subfunction 0010h data:
  8807. Offset    Size    Description
  8808.  00h  2 BYTEs    (return) ???
  8809.  02h    WORD    (return) protocol number
  8810.  04h    WORD    (call) protocol number for which to get name
  8811.  06h    WORD    (return) ???
  8812.  08h    var    (return) ASCIZ protocol name
  8813.  N    var    (return) ASCIZ protocol name
  8814.  
  8815. Format of Function 0026h/Subfunction 0011h data:
  8816. Offset    Size    Description
  8817.  00h  8 BYTEs    ???
  8818.  08h    var    (return) ASCIZ protocol name
  8819.     var    (return) ASCIZ ??? name
  8820.     var    (return) ASCIZ ??? name
  8821.  
  8822. Format of Function 0026h/Subfunction 0012h data:
  8823. Offset    Size    Description
  8824.  00h  8 BYTEs    (return) ???
  8825.  
  8826. Format of Function 0026h/Subfunction 0013h data:
  8827. Offset    Size    Description
  8828.  00h 116 BYTEs    (return) ???
  8829.  
  8830. Format of Function 0026h/Subfunction 0016h data:
  8831. Offset    Size    Description
  8832.  00h  4 BYTEs    (return) ???
  8833.  
  8834. Format of Function 0026h/Subfunction 0018h data:
  8835. Offset    Size    Description
  8836.  00h 116 BYTEs    (return) ???
  8837.  
  8838. Format of Function 0026h/Subfunction 0019h data:
  8839. Offset    Size    Description
  8840.  00h  4 BYTEs    (return) ???
  8841.  04h    DWORD    (return) task handle of ???
  8842.  
  8843. Format of Function 0026h/Subfunction 001Ah data:
  8844. Offset    Size    Description
  8845.  00h 38 BYTEs    (return) ???
  8846.  
  8847. Format of Function 0026h/Subfunction 001Bh data:
  8848. Offset    Size    Description
  8849.  00h 10 BYTEs    (return) ???
  8850.  
  8851. Format of Function 0026h/Subfunction 001Dh return data [array]:
  8852. Offset    Size    Description
  8853.  00h    WORD    ??? or FFFFh if end of array
  8854.  02h  7 BYTEs    ???
  8855.  09h 27 BYTEs    ASCIZ name of service
  8856.  
  8857. Format of Function 0026h/Subfunction 0024h return data:
  8858. Offset    Size    Description
  8859.  00h    var    ASCIZ username
  8860.  
  8861. Format of Function 0026h/Subfunction 0030h data:
  8862. Offset    Size    Description
  8863.  00h    WORD    (call) UID or 0000h for current user
  8864.         (return) ???
  8865.  02h    WORD    (return) UID
  8866.  04h  6 BYTEs    (return) ???
  8867.  0Ah    var    (return) ASCIZ username
  8868.     var    (return) ASCIZ encrypted password
  8869.     var    (return) ASCIZ initial ("home") directory
  8870.  
  8871. Format of Function 0026h/Subfunction 0034h data:
  8872. Offset    Size    Description
  8873.  00h  1-3 BYTEs IP network number of caller's machine (low byte first)
  8874.  
  8875. Format of Function 0026h/Subfunction 0038h return data:
  8876. Offset    Size    Description
  8877.  00h    BYTE    ???
  8878.  01h  4 BYTEs    IP address
  8879.  05h    var    ASCIZ machine name
  8880.     ???
  8881.  
  8882. Values for error code:
  8883.  0000h    successful
  8884.  0009h    "BADF" bad file handle
  8885.  000Ch    "ENOMEM" out of memory
  8886.  000Eh    "EFAULT" bad address
  8887.  0016h    "EINVAL" invalid argument
  8888.  0018h    "EMFILE" too many open files
  8889.  0020h    "EPIPE" ??? broken pipe
  8890.  0023h    "EWOULDBLOCK" operation cannot be completed at this time
  8891.  0024h    "EINPROGRESS" operation now in progress
  8892.  0026h    "ENOTSOCK" socket invalid
  8893.  0028h    "EMSGSIZE" message too long to send atomically
  8894.  002Ch    "ESOCKTNOSUPPORT" socket type not supported
  8895.  002Fh    "EAFNOSUPPORT" address family not supp. by protocol fam.
  8896.  0031h    "EDOM" argument too large
  8897.  0038h    "EISCONN" socket is already connected
  8898.  0039h    "ENOTCONN" socket is not connected
  8899.  
  8900. Format of Socket Context Record:
  8901. Offset    Size    Description
  8902.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  8903.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  8904.  06h    WORD    PSP segment of owner or 0000h
  8905.  08h    WORD    mapping context of owning window (see AX=1016h)
  8906.  0Ah  2 BYTEs    ???
  8907.  0Ch    WORD    address family
  8908.  0Eh    WORD    socket type
  8909.  10h    WORD    protocol
  8910.  12h    WORD    socket state
  8911.         0001h created
  8912.         0002h bound
  8913.         0003h listening???
  8914.         0005h connected
  8915.  14h    DWORD    timer object handle
  8916.  18h    DWORD    object handle (mailbox???)
  8917.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  8918.  20h    DWORD    pointer to ??? or 0000h
  8919.  24h  6 BYTEs    ???
  8920.  2Ah    WORD    file handle for socket or FFFFh
  8921.  2Ch  2 BYTEs    ???
  8922.  2Eh    WORD    nonzero if socket nonblocking
  8923. ---network connections only---
  8924.  30h  2 BYTEs    ???
  8925.  32h    WORD    ???
  8926.  34h  4 BYTEs    (big-endian) IP address of remote
  8927.  38h  6 BYTEs    ???
  8928. --------Q-15DE2F-----------------------------
  8929. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  8930.     AX = DE2Fh
  8931. Return: BX = status
  8932.         0001h keyboard focus has been given to a direct window since the
  8933.         last call
  8934.         0000h if not
  8935. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  8936.     Quarterdeck stated that this call would not be available under future
  8937.       versions of DESQview Classic, but it is still present in v2.60
  8938. --------Q-15DE30-----------------------------
  8939. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  8940.     AX = DE30h
  8941. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  8942. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  8943.     you must first check the DESQview version to verify that it is 2.50 or
  8944.       greater
  8945. SeeAlso: INT 21/AH=2Bh/CX=4445h
  8946. --------Q-15DE31-----------------------------
  8947. INT 15 - DESQview/X v1.10 - ???
  8948.     AX = DE31h
  8949.     CX = ???
  8950.         0000h ???
  8951.         nonzero ???
  8952.     ???
  8953. Return: ???
  8954. --------b-15DF-------------------------------
  8955. INT 15 - Juko UNIQUE UX BIOS - TURBO MODE CONTROL
  8956.     AH = DFh
  8957.     AL = function
  8958.         00h turn on Turbo mode
  8959.         01h turn off Turbo mode
  8960.         02h set Turbo mode according to hardware switch
  8961. SeeAlso: INT 13/AX=FFFFh
  8962. --------b-15E00F-----------------------------
  8963. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  8964.     AX = E00Fh
  8965.     ES:BX -> start of 2nd processor's execution
  8966. Return: AL = status
  8967.         0Fh successful
  8968.         00h failure
  8969. SeeAlso: AX=E10Eh,AX=E200h
  8970. --------b-15E10E-----------------------------
  8971. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  8972.     AX = E10Eh
  8973.     ES:BX -> start of 2nd processor's execution
  8974. Return: AL = status
  8975.         0Fh successful (halted)
  8976.         00h failure (not halted)
  8977. SeeAlso: AX=E00Fh,AX=E200h
  8978. --------b-15E200-----------------------------
  8979. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  8980.     AX = E200h
  8981. Return: AX bit 15 set if 2nd processor available
  8982. SeeAlso: AX=E00Fh,AX=E10Eh
  8983. ----------15E4-------------------------------
  8984. INT 15 - Tandy??? - ???
  8985.     AH = E4h
  8986.     AL = subfunction
  8987.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  8988.     DL = ???
  8989. Return: DL = 00h if successful???
  8990. Note:    the section of code in 386MAX which calls these functions also checks
  8991.       whether the ROM BIOS has both Tandy and Phoenix Technologies
  8992.       signatures if these calls fail
  8993. ----------15E4-------------------------------
  8994. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  8995.     AH = E4h
  8996.     AL = subfunction
  8997.         00h get ???
  8998.         Return: CF clear
  8999.             AH = 00h
  9000.             CX = 0000h
  9001.             BX = ??? (read from [XBDA:0094h])
  9002.         01h,02h unsupported by this ROM version
  9003.         Return: CF set, AH = 86h
  9004.         80h,90h,A0h,B0h,C0h,D0h,E0h,F0h unsupported by this ROM version
  9005.         Return: CF set, AH = 86h
  9006.         81h,91h,A1h,B1h,C1h,D1h,E1h,F1h unsupported by this ROM version
  9007.         Return: CF set, AH = 86h
  9008. --------b-15E800-----------------------------
  9009. INT 15 - Compaq Caravel - ???
  9010.     AX = E800h
  9011.     ???
  9012. Return: ???
  9013. --------b-15E801-----------------------------
  9014. INT 15 - Compaq Caravel - ???
  9015.     AX = E801h
  9016.     ???
  9017. Return: ???
  9018. --------b-15E802-----------------------------
  9019. INT 15 - Compaq Caravel - ???
  9020.     AX = E802h
  9021.     ???
  9022. Return: CF clear
  9023.     AX = 0000h
  9024.     CX = 0000h
  9025. --------m-15F200CX454D-----------------------
  9026. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  9027.     AX = F200h
  9028.     CX = 454Dh
  9029. Return: CF clear if hardware already initialised
  9030.         BX = upper RAM areas in use
  9031.         bit 0: C000-C3FF
  9032.         bit 1: C400-C7FF
  9033.         ...
  9034.         bit 11: EC00-EFFF
  9035.     CF set if hardware not initialised yet
  9036. --------!------------------------------------
  9037.